我试图模拟EntityPersistor的一个方法
T getSingleResultFromTypedQuery(String queryString, Map<String, Object> params);
我想检查queryString是否匹配特定的queryString,以及params是否包含特定的值。如果那两个条件为真,我想返回一个特定的对象XY。
EntityPersistor<UserEntity> entityPersistorMocked = mock(EntityPersistorStub.class);
when(entityPersistorMocked.getSingleResultFromTypedQuery(argThat(new ArgumentMatcher<String>() {
@Override
public boolean matches(Object o) {
return "SELECT u FROM UserEntity u where u.username = :u".equals(o.toString());
}
}), argThat(new ArgumentMatcher<Map<String, Object>>() {
@Override
public boolean matches(Object o) {
HashMap<String, Object> params = (HashMap<String, Object>) o;
if (params.containsKey('u') && params.get('u').toString().equals("hans")) {
return true;
} else {
return false;
}
}
})))
.thenAnswer(new Answer<UserEntity>() {
@Override
public UserEntity answer(InvocationOnMock invocation) throws Throwable {
UserEntity user = new UserEntity();
user.setUserId(1);
user.setDisplayName("Dummy User");
user.setUsername("hans");
user.setPassword("pass");
return user;
}
});
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
在此处检测到错误的参数匹配器:
我该怎么解决呢?或者是否有更好的方法来模拟一个方法并定义一个特定的返回大小写(如果param1 eq x和param2 eq y)?
我只想说:
Answer<UserEntity> answer = new Answer<UserEntity>() {
public UserEntity answer(InvocationOnMock invocation) throws Throwable {
String queryString = (String) invocation.getArgument(0);
Map params = (Map) invocation.getArgument(1);
if ("foo".equals(queryString) && params.containsKey("bar")) {
return x;
} else {
return y;
}
}
};
when(mock.getSingleResultFromTypedQuery(anyString(), any(Map.class)).thenAnswer(answer);
在setUp()方法下一行中: 以下是错误: org.mockito.exceptions.misusing.invaliduseofmatchersexception:在此处检测到错误放置或错误使用的参数匹配器: ->在com.auditService.test.auditServiceClientTest.setup(auditServiceClientTest.java:72) when(m
在BundleProcessorTest.java中的以下两个测试用例中,我的第一个测试用例成功地通过了异常。 org.mockito.exceptions.misusing.invaliduseofmatchersexception:在此处检测到错误的参数匹配器: ->在bundle.test.bundleProcessorTest.bundlePluginShouldNotBenull(Bun
问题内容: 在 BundleProcessorTest.java 的以下两个测试用例中,尽管我的第一个测试用例成功通过,但我低于异常。 org.mockito.exceptions.misusing.InvalidUseOfMatchersException:在此处检测到放错位置的参数匹配器: ->在bundle.test.BundleProcessorTest.bundlePluginShoul
问题内容: 有没有一种使用通用参数模拟类的干净方法?说我必须模拟一个类,我需要将该类传递给需要一个的方法。我可以很容易地做到以下几点: 假定返回通用类型。但是,当我稍后将其传递给期望的方法时,将会有小猫。铸造是这样做的唯一方法吗? 问题答案: 我认为您确实需要强制转换,但应该不会太糟: