Mockito匹配任何类参数
有没有办法匹配以下示例例程的任何类参数?
class A { public B method(Class<? extends A> a) {}
}
无论传递到哪个类,如何 返回a ?以下尝试仅适用于匹配的特定情况。new B()``method``A
A a = new A();B b = new B();
when(a.method(eq(A.class))).thenReturn(b);
:一种解决方案是
(Class<?>) any(Class.class)
回答:
还有两种方法(请参阅我对@Tomasz Nurkiewicz的先前回答的评论):
第一个依据的事实是编译器根本不会让您传递错误的类型:
when(a.method(any(Class.class))).thenReturn(b);
您会丢失准确的输入(Class<? extends A>
),但可能会按需要使用。
第二个涉及更多,但如果您 确实 要确保to的参数method()
是的A
或的子类,则可以说是更好的解决方案A
:
when(a.method(Matchers.argThat(new ClassOrSubclassMatcher<A>(A.class)))).thenReturn(b);
其中ClassOrSubclassMatcher
的org.hamcrest.BaseMatcher
定义为:
public class ClassOrSubclassMatcher<T> extends BaseMatcher<Class<T>> { private final Class<T> targetClass;
public ClassOrSubclassMatcher(Class<T> targetClass) {
this.targetClass = targetClass;
}
@SuppressWarnings("unchecked")
public boolean matches(Object obj) {
if (obj != null) {
if (obj instanceof Class) {
return targetClass.isAssignableFrom((Class<T>) obj);
}
}
return false;
}
public void describeTo(Description desc) {
desc.appendText("Matches a class or subclass");
}
}
!我会选择第一个选项,直到您 真正 需要更好地控制method()
实际返回的内容为止:-)
以上是 Mockito匹配任何类参数 的全部内容, 来源链接: utcz.com/qa/402230.html