代码之家  ›  专栏  ›  技术社区  ›  AppiDevo

BDD Mockito-使用参数captor时verify(…)的别名?

  •  0
  • AppiDevo  · 技术社区  · 6 年前

    我写了一个测试 BBDMockito Argument Captor . 参数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一起使用,并且名称将更适合于 //当 ?

    编辑:

    我要测试的代码是 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 回复  |  直到 6 年前
        1
  •  1
  •   Markoorn    6 年前

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

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