猿问

使用 When vs Verify 验证方法调用

这让我很困惑,让我用基本的例子来解释;


public void search(String name) {

        // some more

        Response response = component.findByName(name);

        // some more action with response

    }

所以当我为它编写测试时;


@Test

public void search_givenName_shouldOk() {

    Example example = new Example();

    Component component= Mockito.mock(Component.class);

    String name = "test";

    when(component.findByName(eq(name))).thenReturn(mock(Response.class));


    example.search(name);

    verify(component, times(1)).findByName(eq(name));

}

所以实际上当我们用 eq(name) 输入编写 when(...) 子句时,它不是已经验证了我们的测试用例吗?否则 findByName 将不会返回 Response 并且进一步的调用将无法正常进行。那么当我们再次用verify(..)验证它的时候,是不是加倍工作了呢?


交互式爱情
浏览 162回答 2
2回答

森栏

when()如果你想模拟一个函数的行为并因此避免测试它,你可以使用。用于verify()检查函数是否已作为测试函数的一部分被调用。这是两个不同的概念。在您的情况下,这when()没有意义,因为您要测试该功能。此外,如果经过测试的函数是某个Example类的一部分,您也不希望模拟该函数。你只会嘲笑你不想测试的东西。

摇曳的蔷薇

when不验证任何东西,它只是指示模拟对象在被调用时如何表现。所以你的断言当您在输入时使用“eq”时,您已经验证了是否使用该输入调用了它。是假的。所以这条线:when(component.findByName(eq(name))).thenReturn(mock(Response.class));意思是“模拟组件,当(如果)findByName使用这个特定名称调用你的方法时,你能返回那个好的响应吗?”当您模拟了所有所需的行为并调用了实际测试的方法后,您仍然需要verify模拟对象的行为与您期望的一样。
随时随地看视频慕课网APP

相关分类

Java
我要回答