Я пытаюсь модульным тестированием методы в классе, который инициализирует некоторые частные поля:Как проверить метод void, который изменяет только переменные частного класса?
public void init(Properties props) throws Exception {
this.language = props.getProperty(Constants.LANGUAGE,Constants.LANGUAGE_DEFAULT);
this.country = props.getProperty(Constants.COUNTRY,Constants.COUNTRY_DEFAULT);
try {
this.credits = Integer.valueOf(props.getProperty(Constants.CREDITS_OPTION_NAME, Constants.CREDITS_DEFAULT_VALUE));
} catch (NumberFormatException e) {
throw new Exception("Invalid configuration: 'credits' does not contain a valid integer value.", e);
}
//rest of method removed for sake of simplicity
}
Моей дилемма состоит в том, что я хочу, чтобы утверждать, что язык, страна и кредиты поле было установлено после вызова инициализации, однако они являются частными и не имеют общедоступных методов доступа. Я вижу, есть два решения для тестирования:
- Сделать общедоступными методы доступа к закрытым полям, затем вызвать эти методы после тестирования метода init.
- Сделайте единичный тест только методом вызова init и предположим, что все работало корректно, не было исключено.
Как вы думаете, что является идеальным способом протестировать этот метод?
Есть ли причина, по которой никто не предлагал добавить еще один тест, который вызывает сеттер, а затем вызывает «другой метод в том же классе, который требует установки этих полей?» Я довольно новичок в TDD и склонялся к такому решению в своей собственной работе, есть ли проблемы с этим? Является ли это еще модульным тестированием или чем-то еще, например, интеграционным тестированием или чем-то еще? как представляется, предлагается здесь: http://stackoverflow.com/questions/3193257/should-i-test-public-class-function-that-changes-only-internal-state-of-the-obje –