当前位置: 首页 > 面试题库 >

Mockito可以在方法调用时根据其值验证参数吗?

冯鸿哲
2023-03-14
问题内容

我有一个Foo类是SUT,一个Bar类是它的合作者。Foo电话run(List<Object> values)Bar以“
expectedList”作为参数。然后,Foo将为此添加更多元素,以List使其状态与调用时的状态不同run()。这是我的测试用例。

@Test
public void testFoo() {
    Bar collaborator = spy(new Bar()); 
    Foo sut = new Foo(collaborator);
    verify(collaborator).run(expectedList);
}

请注意,协作者实际上是一个间谍对象,而不是模拟对象。该测试用例将失败,因为即使run()使用等于的参数调用了该测试用例,也因为expectedList它被修改了,并且其当前值不再等于expectedList。但是,这是应该工作的方式,所以我想知道是否有一种方法可以让Mockito在调用方法时存储参数快照,并根据这些值而不是最新值来验证它们。


问题答案:

Answer调用方法时,请使用来检查参数的值。如果值错误,则可以AssertionError在范围内插入Answer,也可以存储值,然后在最后进行断言。



 类似资料:
  • 我在类中有一个签名为的方法。 我有一个调用方法的代码块: 如果我想测试databaseService.save(user)没有被调用,那么我如何用Mockito(3.3.3版)来做呢?

  • 我在SUT中有这段代码: 我知道模型不会为空,因为模型已经存在。因此,我希望不应该与model一起调用。因此,我需要某种的方法,以确保该方法不是用此参数调用的。现在我知道了如何进行相反的操作:如何确保/验证或任何方法本身是在的帮助下用参数调用的,但不确定当前的场景。请帮帮忙。 谢谢

  • 问题内容: 我有一个被调用两次的方法,并且我想捕获第二个方法调用的参数。 这是我尝试过的: 但是我得到一个例外,因为Mockito认为应该只调用一次。 如何验证第二个调用的参数? 问题答案: 我认为应该 来自嘲笑javadoc的示例:

  • 问题内容: 我正在尝试使用Mockito测试一些旧代码。 我想存根用于生产的a如下: 我可以写: 但是明显的问题是,从来没有使用与我存根方法相同的对象来调用它。(请该运算符!) 如果我可以以不考虑参数的方式返回该方法的方法来对它进行存根,我将非常喜欢。失败的话,我会听取其他解决方法的建议,但我真的想避免更改生产代码,直到有合理的测试范围为止。 问题答案: 或(避免s): 不要忘记导入匹配器(有许多

  • 问题内容: 在Java中使用Mockito如何验证某个方法仅被调用一次且其确切参数忽略对其他方法的调用? 样例代码: 在本节中应该做什么? 已经尝试失败: 不。它不允许调用其他方法,例如。 不。没有考虑到我们允许一个呼叫。 问题答案: 第一个检查预期的参数化呼叫,第二个检查根本没有一个呼叫。

  • 我试图验证在使用powerMockito 1.6.4测试服务方法时从未调用过静态方法 我按照这个答案做了同样的事情。 以下是我的代码。 我现在面临的问题是,调用real并给出nullPointerException。 我的假设是与一起工作,以便指定要验证的静态方法。 我错过什么了吗?