在JMockit中,如何为一个已知参数(或模拟参数)设置一次被调用方法的期望值一次,但是如果它使用不同的参数调用该方法,则将其设置为失败。
即我想为Arg =“ XYZ”的时间= 1设置期望,但对于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;
这是最好的方法吗?
最佳答案
尽管可以使用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"
}