У меня есть объект Singleton/Factory, который я бы хотел написать для теста JUnit. Метод Factory определяет, какой класс реализации должен создавать экземпляр на основе имени класса в файле свойств в пути к классам. Если файл свойств не найден или файл свойств не содержит ключ класса, класс будет создавать экземпляр класса реализации по умолчанию.Использование разных загрузчиков классов для разных тестов JUnit?
Поскольку фабрика хранит статический экземпляр Singleton для использования после его создания, чтобы иметь возможность протестировать логику «failover» в методе Factory, мне нужно будет запускать каждый тестовый метод в другом загрузчике классов.
Есть ли какой-либо способ с JUnit (или с другим пакетом тестирования модулей) для этого?
редактировать: вот некоторые из кода завода, который находится в использовании:
private static MyClass myClassImpl = instantiateMyClass();
private static MyClass instantiateMyClass() {
MyClass newMyClass = null;
String className = null;
try {
Properties props = getProperties();
className = props.getProperty(PROPERTY_CLASSNAME_KEY);
if (className == null) {
log.warn("instantiateMyClass: Property [" + PROPERTY_CLASSNAME_KEY
+ "] not found in properties, using default MyClass class [" + DEFAULT_CLASSNAME + "]");
className = DEFAULT_CLASSNAME;
}
Class MyClassClass = Class.forName(className);
Object MyClassObj = MyClassClass.newInstance();
if (MyClassObj instanceof MyClass) {
newMyClass = (MyClass) MyClassObj;
}
}
catch (...) {
...
}
return newMyClass;
}
private static Properties getProperties() throws IOException {
Properties props = new Properties();
InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(PROPERTIES_FILENAME);
if (stream != null) {
props.load(stream);
}
else {
log.error("getProperties: could not load properties file [" + PROPERTIES_FILENAME + "] from classpath, file not found");
}
return props;
}
Одиночные игры приводят к целому миру боли. Избегайте синглтонов, и ваш код становится намного легче тестировать, и все будет круче. – 2008-09-05 15:42:11