如何捕获已知参数的JMockit期望,但如果使用不同的参数调用方法则失败

时间:2014-02-04 15:24:38

标签: java unit-testing mocking jmockit

在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;

这是最好的方式吗?

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"
}