2011-03-08 158 views
4

我有一個方法 - getSomethingAmount()在某些類(類A)我想測試。這個 getSomethingAmount()方法邏輯取決於Set bSet,它是在類A初始化的構造函數中傳遞的 。例如,如果 設置bSet包含2個對象Status.OK,當getSomethingAmount()必須 返回2.我怎樣才能正確驗證這種情況與 Mockito?用Mockito驗證的正確方法

現在我接頭2 B級類型的對象,把它們放進BSET,然後斷言 getSomethingAmount()方法,結果使用JUnit斷言 - 它的工作原理, 但它並不在我看來像「真」這樣的Mockito。

回答

1

從您對預期行爲的描述中,聽起來像是以相當穩定的方式對單元測試方法進行測試。通過「真正的Mockito方式」我想你想的是一樣的東西:

Set mockBSet = mock(Set.class); 
stub(mockBSet.size()).toReturn(2); 
A testObjectA = new A(mockBSet); 
Assert.assertEquals(testObjectA.getSomethingAmount(), 2); 

這是假設下,即設置和測試對象的初始化沒有任何副作用,您希望測試考慮到。 (例如,總是添加一些默認的「somethings」)。在這種情況下,您也可以省略stubbing並斷言待測試的方法返回一個等於set大小的值。

1

模擬集合中的對象,而不是集合。否則,如果您更改實施,測試將會很脆弱並且會中斷。例如,如果您決定需要遍歷Set中的對象,而不是使用size-method。

B b = mock(B.class); 
A target = new A(new HashSet<B>(Arrays.asList(b, b))); 
Assert.assertSame(2, target.getSomethingAmount()); 
相關問題