为了账号安全,请及时绑定邮箱和手机立即绑定

使用 When vs Verify 验证方法调用

使用 When vs Verify 验证方法调用

交互式爱情 2023-04-13 14:49:51
这让我很困惑,让我用基本的例子来解释;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类的一部分,您也不希望模拟该函数。你只会嘲笑你不想测试的东西。


查看完整回答
反对 回复 2023-04-13
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

when不验证任何东西,它只是指示模拟对象被调用时如何表现。

所以你的断言

当您在输入时使用“eq”时,您已经验证了是否使用该输入调用了它。

是假的。

所以这条线:

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

意思是“模拟组件,当(如果)findByName使用这个特定名称调用你的方法时,你能返回那个好的响应吗?”

当您模拟了所有所需的行为并调用了实际测试的方法后,您仍然需要verify模拟对象的行为与您期望的一样。


查看完整回答
反对 回复 2023-04-13
  • 2 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信