我编写了使用BBDMockito
和Argument Captor
的测试。 Argument Captor仅用于捕获回调并调用onDataNotAvailable()
,不用于验证。
@Test
public void loadNoItemFromRepository_showsMissingItem() {
//given
itemDetailPresenter = new ItemDetailPresenter(UNCHECKED_ITEM.getId(), itemsRepository, itemDetailView);
given(itemDetailView.isActive()).willReturn(true);
//when
itemDetailPresenter.load();
verify(itemsRepository).getItem(eq(UNCHECKED_ITEM.getId()), getItemCallbackArgumentCaptor.capture());
getItemCallbackArgumentCaptor.getValue().onDataNotAvailable();
//then
then(itemDetailView).should().showMissingItem();
}
放置在Verify
部分中的 //when
令人困惑,因为名称建议将其放置在验证部分(//then
)中。 verify()
是否有别名,以便我可以将其与参数captor一起使用,并且该名称将更适合//when
?
已编辑:
我要测试的代码是是否调用了itemDetailView.showMissingItem()
。
public void load() {
(...)
itemsRepository.getItem(itemId, new ItemsDataSource.GetItemCallback() {
@Override
public void onItemLoaded(Item item) {
(...)
if (nonNull(item))
showItem(item);
else
itemDetailView.showMissingItem();
}
@Override
public void onDataNotAvailable() {
(...)
itemDetailView.showMissingItem();
}
});
}
答案 0 :(得分:1)
verify(...)
是一个断言,用于检查某个方法是否被调用以及是否调用了多少次-它属于//then
部分
我看到您也在使用argumentsCaptor,但并未对其进行任何检查,因此可以进行适当的过程来断言所捕获的值(getItemCallbackArgumentCapture.getValue()
包含/等于您期望的值)。