3
使用Mockito我試圖驗證某些對象被添加並從另一個對象中刪除。但是這個工作的函數存儲了一個集合的實例,更新了這個集合的內容,並將它傳遞給我的對象。如何驗證內容更改的集合的方法調用?
當我然後嘗試驗證addAll和removeAll被調用了正確的對象時,看起來Mockito實際上持有對集合的引用,因此不知道集合包含何時調用這些方法。一個簡單的例子:
class MySUT
{
private final Collection<Object> objects = new ArrayList<>();
public MySUT(Object firstObject)
{
objects.add(firstObject);
}
public void addNewObject(Collection<Object> other, Object newObject)
{
other.removeAll(objects);
objects.clear();
objects.add(newObject);
other.addAll(objects);
}
}
@Test
public void test()
{
Object firstObject = mock(Object.class);
Object newObject = mock(Object.class);
Collection<Object> myObject = mock(Collection.class);
MySUT sut = new MySUT(firstObject);
sut.addNewObject(myObject, newObject);
verify(myObject).removeAll(eq(Collections.singletonList(firstObject)));
verify(myObject).addAll(eq(Collections.singletonList(newObject)));
}
此測試失敗聲稱removeAll
方法被稱爲用含newObject
這顯然,這不是一個列表。
我不能使用ArgumentCaptor
,因爲它的工作方式相同 - 所以我如何驗證正確的東西已經傳遞給myObject
(顯然在真正的代碼中myObject不是一個簡單的集合)?