Рефакторинг Java-класса для модульного тестирования без сохранения состояния - PullRequest
0 голосов
/ 17 декабря 2018

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

...