У меня есть класс фабрики, чтобы восстановить конфигурацию для моего приложения:Тест синглтон с JUnit
public class ConfigurationFactory {
private static ConfigurationFactory configurationFactory = new ConfigurationFactory();
private Configuration configuration = null;
public static ConfigurationFactory getConfigurationFactory() {
return configurationFactory;
}
и некоторые методы getConfiguration в зависимости от того, где я получаю от конфигурации (файл, база данных, по умолчанию, и т.д .. .):
public Configuration getConfiguration(String path){...}
public Configuration getConfiguration(String database){...}
Моя проблема заключается в том, что когда я делаю модульного тестирования для каждого метода, я должен перезапустить синглтон, чтобы загрузить из другого источника, так что единственное, что я придумал, чтобы это добавление этого :
public void resetConfiguration() {
this.configuration = null;
}
И я чувствую, что я буду гореть в аду разработчика для этого он :)
Мой вопрос: есть ли другой способ сделать это без добавления этого метода?
Примечание: Я видел this, и я не могу использовать какие-либо рамки DI, такие как Spring или Guice, руководство полагает, что добавление фреймворка сделает проект тяжеловесным, поскольку эта программа предназначена для запуска как демон на серверах.
Сброс экземпляра - это способ пойти на тестирование синглтонов, потому что их всегда трудно проверить, и не может быть приятного пути. Иногда такие проблемы подразумевают, что в вашем дизайне есть что-то, что можно было бы реорганизовать. Вы бы рассмотрели рефакторинг? – zafarkhaja
Да, но как я мог его реорганизовать? Я имею в виду, что я потратил некоторое время на поиски наилучшего способа сделать это, и фабрика синглтона показалась хорошей моделью, она действительно делает работу в ясной форме. Единственная проблема, с которой я столкнулся, - это тесты, но я не хочу реорганизовывать все это только для установки теста jUnit ... –
Я рассматриваю модульные тесты как показатель качества кода. Если я сталкиваюсь с чем-то непроверенным, я стараюсь реорганизовать этот фрагмент кода. Но, конечно, это ваш код, и если эта проблема проверки не беспокоит вас, сброс экземпляра в порядке. Вы, например, взглянули на шаблон дизайна абстрактного завода? Я думаю, что это должно быть более testable ... – zafarkhaja