首页 > 解决方案 > BDD Mockito - 使用参数捕获器时验证(...)的别名?

问题描述

我编写了使用BBDMockitoand的测试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放在//whensection 中会让人感到困惑,因为顾名思义,它应该放在验证部分 ( //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();
        }
    });
}

标签: unit-testingtestingmockitotddbdd

解决方案


verify(...)是一个断言,它用于检查一个方法被/未被调用以及多少次 - 它属于该//then部分

我看到您也在使用argumentCaptor,但没有用它检查任何东西,正确的过程是断言捕获的值(getItemCallbackArgumentCapture.getValue()包含/等于您期望的值)。


推荐阅读