在JMockit中,如何为已知参数(或模拟参数)设置一次调用方法的期望,但如果调用具有不同参数的方法则将其设置为失败。
即。我想设置一个期望值= 1,其中Arg =“XYZ”但是对于Arg!=“XYZ”的方法的任何其他调用,次数= 0。
这些期望的排序只会导致我的测试失败。我确实找到了一种方法来做到这一点,虽然对我来说这是相当麻烦的我觉得,这是代码:
obj.getDTOs(anyString);
result = new Delegate() {
List<DTO> getDTOs(String testArg)
{
if (testArg.equals(expectedString)) {
return Collections.<DTO>emptyList();
} else {
throw new IllegalArgumentException();
}
}
};
result = Collections.<DTO>emptyList();
times = 1;
这是最好的方式吗?
答案 0 :(得分:1)
以下内容可行,但也可以使用Delegate
:
static class Service {
List<?> getDTOs(String s) { return null; }
}
@Test
public void example(@Mocked final Service obj) {
new NonStrictExpectations() {{
obj.getDTOs("XYZ"); times = 1; // empty list is the default result
obj.getDTOs(withNotEqual("XYZ")); times = 0;
}};
assertEquals(0, obj.getDTOs("XYZ").size());
obj.getDTOs("abc"); // fails with "unexpected invocation"
}