我正在测试一个名为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
关键字指定结果链?
答案 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;
}
}
};
}}
不确定是否有更好的解决方案,比这更简洁。