unit-testing - BDD Mockito - 使用参数捕获器时验证(...)的别名?
问题描述
我编写了使用BBDMockito
and的测试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
section 中会让人感到困惑,因为顾名思义,它应该放在验证部分 ( //then
)。是否有别名,verify()
以便我可以将它与参数捕获器一起使用,并且名称会更适合//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();
}
});
}
解决方案
verify(...)
是一个断言,它用于检查一个方法被/未被调用以及多少次 - 它属于该//then
部分
我看到您也在使用argumentCaptor,但没有用它检查任何东西,正确的过程是断言捕获的值(getItemCallbackArgumentCapture.getValue()
包含/等于您期望的值)。
推荐阅读
- css - 如何应用 css 样式来选择焦点?
- jquery - 减去具有相同类名的输入字段
- symfony - 具有 3 个实体的 Symfony 交集实体
- java - 在评估代码或返回已经过去之前查询不返回值
- vim - 移动窗口的 Vim 键盘快捷键不起作用
- asp.net-mvc - POST Fetch .Net Core
- java - 如何在 Java 中将 Scala 回调函数设置为参数?
- spring-boot - 如何在 JUnit 测试中正确模拟 FeignClient 响应
- javascript - 如何使用旋转值通过变换或数学旋转 SVG 矩形?
- rxjs - Observable 在发出数据时是否必须完成?