BDD Mockito-使用参数捕获器时的verify(...)别名?

时间:2018-10-31 15:59:35

标签: unit-testing testing mockito tdd bdd

我编写了使用BBDMockitoArgument 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();
        }
    });
}

1 个答案:

答案 0 :(得分:1)

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

我看到您也在使用argumentsCaptor,但并未对其进行任何检查,因此可以进行适当的过程来断言所捕获的值(getItemCallbackArgumentCapture.getValue()包含/等于您期望的值)。