Chr*_*007 5 java junit unit-testing mocking mockito
对于JUnit测试,我想模拟一个重载方法.但是,无需在mockbuilder中实现多个方法.我想做这样的事情:
Mockito.when(mock.getSomeInfo(Mockito.any(ArgumentType1.class) OR Mockito.any(ArgumentType2.class), Mockito.any(ArgumentType3.class))).then(new Answer<AnswerType>() {..}
Run Code Online (Sandbox Code Playgroud)
我知道这不符合OR声明,但是在Mockito有另一种方法吗?
您可以使用自定义匹配器来完成此操作。
警告:合理使用复杂的参数匹配,尤其是自定义参数匹配器,因为它会使测试的可读性降低。有时,最好为传递给模拟的参数实现 equals() (Mockito 自然使用 equals() 进行参数匹配)。这可以使测试更加干净。
public class TypeOrMatcher extends ArgumentMatcher<Object> {
private final List<Class<?>> clazzes;
public TypeOrMatcher(Class<?>...clazzes) {
this.clazzes = new ArrayList<Class<?>>(clazzes);
}
public boolean matches(Object actual) {
if (actual == null) {
return false;
}
Class<?> actualClass = actual.getClass();
for (Class<?> clazz : clazzes) {
if (clazz.isAssignableFrom(actualClass) {
return true;
}
}
return false;
}
}
TypeOrMatcher isTypeOneOrTwo = new TypeOrMatcher(
ArgumentType1.class, ArgumentType2.class);
Some mockObj = mock(Some.class);
when(mockObj.someMethod(argThat(isTypeOneOrTwo), any(ArgumentType3.class))
.thenReturn(true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9581 次 |
| 最近记录: |