Как мне написать тест для метода getUrl
?
public class UrlList {
private final String[] urls;
private int index;
private SecureRandom random;
public static enum Mode {
VALUE_1,
VALUE_2,
VALUE_3;
}
public UrlList(String... urls) {
if (urls == null || urls.length == 0) {
throw new IllegalArgumentException("The url list may bot be null or empty!");
}
this.urls = urls;
this.index = 0;
this.random = new SecureRandom();
}
public String getUrl(Mode mode) {
switch (mode) {
case VALUE_1:
return urls[0];
case VALUE_2:
return urls[random.nextInt(urls.length)];
case VALUE_3:
try {
return urls[index];
} finally {
index = (index + 1) % urls.length;
}
default:
throw new RuntimeException("Unknown mode!");
}
}
}
В приведенном выше коде urls
представляет собой массив строк.
Главный вопрос в том, как мне протестировать case VALUE_3:
?
Потому что в первый раз проверьте index = 0
, но после этого значение index
изменится на что-то другое в блоке finally
, и я хочу снова проверить его с новым значением index
в том же классе модульного теста.
try-finally
, вам нужно создать исключение в определении вашей функции. - person taylorcressy   schedule 18.06.2014nextUrlIndex = 0
, но после... - person Raedwald   schedule 18.06.2014nextUrlIndex
является закрытым (в противном случае вы могли бы просто проверить его значение из теста), поэтому либо изменениеnextUrlIndex
оказывает какое-то влияние на общедоступный интерфейс, который вы можете протестировать, либо нет (и фактически это деталь реализации, которая должна остаются непроверенными). - person Matthew Strawbridge   schedule 18.06.2014nextUrlIndex = (index + 1) % urls.length;
должна читаться какindex = (index + 1) % urls.length;
- person Serge Ballesta   schedule 18.06.2014