如何使用次数设置对一连串呼叫的jmockit期望?

时间:2018-05-30 11:00:31

标签: jmockit expectations

我正在测试一个名为server的类实例,我正在使用部分模拟,如下所示:

new Expectations(server) {{
    server.readPortNumber(withInstanceOf(File.class));
    result = new FileNotFoundException();
    times = 300;
}}

这适用于前300个电话。但是,301调用应该会成功,所以我期待这样的事情能够发挥作用:

new Expectations(server) {{
    server.readPortNumber(withInstanceOf(File.class));
    result = new FileNotFoundException();
    times = 300;
    result = 100;
    times = 1;
}}

但它没有。 readPortNumber在其首次通话中返回100,显示值已超过。

如何使用times关键字指定结果链?

1 个答案:

答案 0 :(得分:0)

我能够使用Delegate找到答案:

new Expectations(server) {{
    server.readPortNumber(withInstanceOf(File.class));
    result = new FileNotFoundException();
    times = 301;
    result = new Delegate() {
        int n_calls = 0;

        int delegate() throws FileNotFoundException {
            n_calls++;
            if (n_calls <= 300) {
                throw new FileNotFoundException();
            } else {
                return 100;
            }
        }
    };
}}

不确定是否有更好的解决方案,比这更简洁。