Dan*_*ing 44 java unit-testing mocking mockito
如何使用Mockito验证模拟方法根本没有被调用 - 使用任何参数组合?
例如,我有一个对象 - myObject使用第二个模拟对象 - myMockedOtherObject有一个方法 - someMethodOrOther(String parameter1, String parameter2).
我想调用myObject.myMethod()并验证someMethodOrOther() 不会被调用 - 使用任何参数组合.
例如:
myObject.doSomeStuff();
verify(myMockedOtherObject, never()).someMethodOrOther();
Run Code Online (Sandbox Code Playgroud)
除非我不能这样做,因为someMethodOrOther()需要提供特定的参数.
Mat*_*man 82
你可以用Mockito的论证匹配器来完成你想要的东西:
myObject.doSomeStuff();
verify(myMockedOtherObject, never()).someMethodOrOther(
Mockito.anyString(),
Mockito.anyString()
);
Run Code Online (Sandbox Code Playgroud)
当然你也可以做一个小更简洁与静态导入像你有verify和never.
Daw*_*ica 17
你需要使用参数匹配器来做这样的事情.您提供了一个参数匹配器来对应方法中的每个参数,但您必须确保选择一个具有正确类型的参数.您可能需要的所有内容都列在http://docs.mockito.googlecode.com/hg/latest/org/mockito/Matchers.html.
假设你的方法是
public void myMethod(
String text, int count, MyClass something, List<MyClass> someList) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
您的验证声明可能如下所示.
verify(myMock, never()).myMethod(
anyString(), anyInt(), any(MyClass.class), anyListOf(MyClass.class));
Run Code Online (Sandbox Code Playgroud)
您可能需要的一些匹配器是 -
anyInt(), anyLong(), anyShort(), anyBoolean(), anyByte(), anyChar(), anyFloat(), anyDouble() - 这些匹配每种类型的原始版本或对象版本.在我的例子中,我曾经习惯anyInt()匹配一个int,但它也会匹配一个Integer.any(XXX.class) - 这将匹配任何对象类型.在我的例子中,我用它来匹配a MyClass.anyString() - 这是另一种写作方式 any(String.class)anyListOf(XXX.class), anySetOf(XXX.class), anyMapOf(XXX.class, XXX.class) - 这些适用于匹配标准通用集合类型.在我的例子中,我曾经习惯于anyListOf匹配List<MyClass>.还有一些其他人,我强烈建议您通过Javadoc进行简短的浏览.但这些是你最有可能使用的never().
| 归档时间: |
|
| 查看次数: |
50476 次 |
| 最近记录: |