Я пытаюсь написать модульный тест для класса Java.В настоящее время у меня есть класс Java, который выглядит примерно так:
public class MyClass {
private Map<String, String> allowedCountries;
public MyClass() {
loadMetadata();
}
private void loadMetadata() {
// my actual code loads this information from
// a SQL database
allowedCountries = new HashMap<>();
allowedCountries.put("US", "United States");
allowedCountries.put("SG", "Singapore");
allowedCountries.put("DE", "Germany");
}
public boolean checkCountry(String code) {
return allowedCountries.containsKey(code);
}
}
MyClass clazz = mock(MyClass.class);
when(clazz.checkCountry("DE")).thenReturn(true);
when(clazz.checkCountry("JP")).thenReturn(false);
assertTrue(clazz.checkCountry("DE"));
assertFalse(clazz.checkCountry("JP"));
Модульное тестирование должно проводиться в классе MyClass
, в частности, в методе checkCountry()
.Но проблема в том, что приведенный выше код не позволяет нам легко издеваться над картой известных стран.Я знаю, что в любом случае в идеале модульные тесты должны быть без сохранения состояния.Есть ли какой-нибудь способ, которым я могу реорганизовать этот код, чтобы карта известных стран также могла быть смоделирована?