这让我很困惑,让我用基本的例子来解释;public void search(String name) { // some more Response response = component.findByName(name); // some more action with response }所以当我为它编写测试时;@Testpublic 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(..)验证它的时候,是不是加倍工作了呢?
2 回答
森栏
TA贡献1810条经验 获得超5个赞
when()
如果你想模拟一个函数的行为并因此避免测试它,你可以使用。
用于verify()
检查函数是否已作为测试函数的一部分被调用。
这是两个不同的概念。在您的情况下,这when()
没有意义,因为您要测试该功能。此外,如果经过测试的函数是某个Example
类的一部分,您也不希望模拟该函数。你只会嘲笑你不想测试的东西。
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
when
不验证任何东西,它只是指示模拟对象在被调用时如何表现。
所以你的断言
当您在输入时使用“eq”时,您已经验证了是否使用该输入调用了它。
是假的。
所以这条线:
when(component.findByName(eq(name))).thenReturn(mock(Response.class));
意思是“模拟组件,当(如果)findByName
使用这个特定名称调用你的方法时,你能返回那个好的响应吗?”
当您模拟了所有所需的行为并调用了实际测试的方法后,您仍然需要verify
模拟对象的行为与您期望的一样。
添加回答
举报
0/150
提交
取消