java - Mockito 可以根据方法调用时的值来验证参数吗?

标签 java unit-testing mockito

我有一个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);
}

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

最佳答案

调用方法时使用Answer检查参数的值。如果值错误,您可以在 Answer 中抛出 AssertionError,或者您可以存储该值,并在最后执行断言。

关于java - Mockito 可以根据方法调用时的值来验证参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38660517/

相关文章:

java - 从 Java eclipse 可执行 jar 中读取文本文件

java - 如何实现一个 Java 方法,它将根据调用类的名称调用另一个方法?

java - MongoDb 将 Float 字段存储为 Double。获取 IllegalArgumentException

unit-testing - Qt 单元测试

typescript - Jest/ Jasmine : Weird Execution Order Of beforeEach()

java - 使用 java 8 编写的 DAO 类方法的 Mockito 测试用例

java - 重新启动 Java Spring Boot 应用程序

c# - 测试错误: The 'async' operator lacks await operator

java - 使用 Context.getApplicationContext() 进行 Android JUnit 测试

java - 来自抽象类的父类(super class)的模拟字段