Java 模拟验证

Java 模拟验证,java,mockito,Java,Mockito,我不明白这个构造的意义是什么?这有什么帮助?它与仅仅调用函数有什么不同? 文档很薄。 感谢您当您执行模拟列表时。添加(“一”)它在执行模拟对象上的操作时,会记住您的操作。因此,当您执行验证(mockedList)时,添加(“一”),它验证是否使用参数one在mockedList上调用了add 希望您能有所不同。在您的示例中确实很明显,但验证方法调用的主要思想出现在实际代码测试中-想象一些代码执行方法调用,如: //Let's import Mockito statically so that t

我不明白这个构造的意义是什么?这有什么帮助?它与仅仅调用函数有什么不同?
文档很薄。

感谢您当您执行
模拟列表时。添加(“一”)它在执行
模拟对象上的操作时,会记住您的操作。因此,当您执行
验证(mockedList)时,添加(“一”)
,它验证是否使用参数
one
mockedList
上调用了
add


希望您能有所不同。

在您的示例中确实很明显,但验证方法调用的主要思想出现在实际代码测试中-想象一些代码执行方法调用,如:

//Let's import Mockito statically so that the code looks clearer
import static org.mockito.Mockito.*;

//mock creation
List mockedList = mock(List.class);

//using mock object
mockedList.add("one");
mockedList.clear();

//verification
verify(mockedList).add("one");
verify(mockedList).clear();
A类{
....
服务.剂量测定法()
....
}

为了测试它,您将传递模拟服务对象,但有时您希望验证为该调用传递的特定参数值(或调用数),因此您将在示例中使用类似的验证。

您希望测试类A的某个方法
Foo
在类B的对象上调用某个方法
Bar
,您正在测试类A。在测试期间,您对类B进行了模拟。然后您以某种方式将此模拟对象传递给类A(取决于类A的实际工作方式)。当您的测试运行A类的
Foo
方法时,您希望在模拟B类时调用
Bar
方法。通过调用
Bar
方法的
verify
,在测试
Foo
方法之后,您可以检查
Foo
方法是否实际工作正常-它调用
Bar

mockito的验证方法是验证方法调用次数,如果调用时间为1,我们可以忽略此参数,请参阅mockito行1473的源代码

class A{
 ....
 service.doSomething(<some arguments>)
 ....
}

确实是为了验证add方法执行一次

你基本上是在问“我想在测试中模拟类吗”,谷歌肯定能帮你。另外:这样做可能会重复我能发现什么?我仍然没有看到一个切实可行的办法example@titus这是一个简单的例子。想象一下将此对象传递给某个自定义方法的场景。现在,您需要验证是否调用了该对象上的一个特定方法。这将非常有用。另一个区别是使用模拟对象进行存根,这在处理测试环境中不可用的对象时变得非常重要。您可以简单地模拟和存根它们。调用后,mockito将使用stubbed行为。
public static <T> T verify(T mock) {
    return MOCKITO_CORE.verify(mock, times(1));
}
verify(mockedList).add("one");
//is the same as
verify(mockedList,times(1)).add("one");