Pet*_*háč 44 java generics class mocking mockito
有一个通用的方法,将类作为参数,我有问题与Mockito存根.该方法如下所示:
public <U extends Enum<U> & Error, T extends ServiceResponse<U>> T validate(
Object target, Validator validator, Class<T> responseClass,
Class<U> errorEnum);
Run Code Online (Sandbox Code Playgroud)
这真是可怕,至少对我而言......我可以想象没有它的生活,但代码库的其余部分愉快地使用它......
在我的单元测试中,我打算将此方法存根以返回一个新的空对象.但是我如何用mockito做到这一点?我试过了:
when(serviceValidatorStub.validate(
any(),
isA(UserCommentRequestValidator.class),
UserCommentResponse.class,
UserCommentError.class)
).thenReturn(new UserCommentResponse());
Run Code Online (Sandbox Code Playgroud)
但由于我正在混合和匹配匹配器和原始值,我得到"org.mockito.exceptions.misusing.InvalidUseOfMatchersException:无效使用参数匹配器!"
Jes*_*sse 82
问题是,你不能在模拟调用中混合参数匹配器和真实参数.所以,而是这样做:
when(serviceValidatorStub.validate(
any(),
isA(UserCommentRequestValidator.class),
eq(UserCommentResponse.class),
eq(UserCommentError.class))
).thenReturn(new UserCommentResponse());
Run Code Online (Sandbox Code Playgroud)
注意使用eq()参数匹配器来匹配相等性.
请参阅:https://static.javadoc.io/org.mockito/mockito-core/1.10.19/org/mockito/Matchers.html#eq(T)
此外,您可以使用same()参数匹配器作为Class<?>类型 - 这匹配相同的标识,如==Java运算符.