У меня есть простой шаблон для динамической фабрики в Java (groovy на самом деле, но для всех целей, которые мы можем считать java), который получает операцию и динамически загружает обработчик для этой конкретной операции, читая ее из файл свойства с соответствующим именем.Загрузка модуля динамического класса
картина так просто, как имеющий базовый метод со следующей подписью:
class ReflectionFactory implements BaseFactory {
PropertyReader propertyReader
public ReflectionFactory(PropertyReader reader) {
this.propertyReader = reader
}
Adapter resolveAdapter(String serviceName) {
// TODO: Find service configuration in propertyReader and load via class loader
return defaultAdapter
}
}
функциональность в классе еще не реализован, и я хочу, чтобы реализовать его с помощью TDD, то есть, я хочу создайте тест, который будет проверять, что, учитывая serviceName, он вернет класс соответствующего типа.
Код, который загрузит класс будет выглядеть следующим образом:
String className = propertyReader.getProperty(serviceName)
this.class.classLoader.loadClass(className, true, false)
То, как я это вижу, мне нужно «макет» загрузчик классов, но очевидно, что я не хочу, чтобы ввести инъекции класс просто заменить эту строку:
this.class.classLoader.loadClass(className, true, false)
есть ли способ, чтобы проверить, что ClassLoader в настоящее время вызывается с правильными параметрами? Другими словами, есть ли способ «издеваться» или «заменять» вызов классаLoader?
В идеале я бы смог сделать (псевдокод)
when(classLoader.loadClass("serviceName", true, false)).thenReturn(dummyClassInstance)
Так что тестовый код будет выглядеть примерно так:
void testWhenResolveServiceAndClassPropertyDefinedInstansceIsCreated() {
serviceName = "myService"
when(propertyReader.getPropertyValue("myService")).thenReturn("com.mydomain.adapters.testAdapter")
when(classLoader.loadClass("com.mydomain.adapters.testAdapter", true, false)).thenReturn(testDummy)
def factory = new ReflectionFactory(propertyReader)
def adapter = factory.resolveAdapter(serviceName)
assertNotNull(adapter)
verify(classloader).loadClass("com.mydomain.adapters.testAdapter", true, false)
}
Я использую Mockito в качестве основы насмешливой, но ни в какие рамки насмешливой/solution is welcome
Прежде чем я попытаюсь, вы могли бы предоставить полную реализацию образца ReflectionFactory и тест (с когда, тогда)? Может быть, не компиляция и не работает - просто хотите поймать всю картину. – Opal
Реализация, как я определил, то есть функциональность еще не реализована. Посмотрите на отредактированный вопрос для получения подробной информации о тесте, который я хочу написать –
Спасибо, попробуем это на вечернем UTC. – Opal