Я тестирую экземпляр класса 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
?
Мне удалось найти ответ с помощью 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;
}
}
};
}}
Не уверен, что есть лучшее решение, менее подробное, чем это.
Удивительно, но в текущих версиях это не рекомендуется, аргументируя это тем, что это плохой дизайн, в то время как другие фреймворки его поддерживают.