Situation: У меня есть класс реализации сервиса, аннотированный @Service с доступом к файлу свойств.
@Service("myService")
public class MySystemServiceImpl implements SystemService{
@Resource
private Properties appProperties;
}
Объект свойств конфигурируется через config-файл. applicationContext.xml
<util:properties id="appProperties" location="classpath:application.properties"/>
Я хочу протестировать некоторые методы этой реализации.
Вопрос:Как получить доступ к MySystemServiceImpl-объекту из тестового класса так, чтобы свойства appProperties были правильно инициализированы?
public class MySystemServiceImplTest {
//HOW TO INITIALIZE PROPERLY THROUGH SPRING?
MySystemServiceImpl testSubject;
@Test
public void methodToTest(){
Assert.assertNotNull(testSubject.methodToTest());
}
}
Я не могу просто создать новый MySystemServiceImpl - чем методы, использующие appProperties, бросают NullPointerException. И я не могу напрямую инжектировать свойства в объект - нет соответствующего setter-метода.
Просто помещу сюда правильные шаги (спасибо @NimChimpsky за ответ):
Я скопировал application.properties в test/resources dir.
Я скопировал applicationContext.xml в каталог test/resources. В контексте приложения я добавляю новый боб (определение свойств приложения уже здесь):
Я модифицировал класс теста таким образом:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext.xml"})
public class MySystemServiceImplTest {
@Autowired
MySystemServiceImpl testSubject;
}
И это делает трюк - теперь в моем тестовом классе доступен полностью функциональный объект