Я использую JUnit, но некоторые тесты имеют некоторые проблемы, эти тесты имеют @Автоматизированную аннотацию внутри фасолей Spring и когда я ссылаюсь на них, то bean-атрибуты @Autowired всегда были NULL.@Autowired с тестами JUnit
Вот пример кода:
public class Test {
protected ApplicationContext ac;
@Before
public void setUp() {
ac = new FileSystemXmlApplicationContext("classpath:config/applicationContext.xml"
"classpath:config/test-datasources.xml");
}
@Test
public void testRun() throws Exception {
IManager manager = (IManager)this.ac.getBean("manager");
manager.doSomething();
}
}
@Service
public class Manager implements IManager {
public boolean doSomething() throws Exception {
ParametersJCSCache parametersJCSCache = new ParametersJCSCache();
String paramValue = parametersJCSCache.getParameter("XPTO");
...
}
}
public class ParametersJCSCache extends SpringBeanAutowiringSupport {
@Autowired
private IParameterManager parameterManager; //THIS IS NULL
}
При вызове объекта Менеджер весна генерирует прокси, но при обращении к @Autowired parameterManager объект имеет нулевое значение, и с этим вопросом я не могу проверить этот метод ,
Любая идея, что вызывает это? Почему объект не вводится? Он хорошо работает в контексте веб-приложения, но в тестовом контексте всегда имеет значение NULL.
Исправить. Вот почему я использую Autowired, если ParametersCache - это управляемый весом компонент, мне не нужно иметь Autwired Manager. Это работает в контексте веб-приложения. – bigster
Если параметрыJCSCache - управляемый bean-компонент, не относящийся к Spring, как на самом деле IParameterManager может быть введен в Spring? –
Это тайна, это работает при вызове того же кода, когда я внутри веб-контекста. Использование JUnit не дает такого же поведения. И класс ParametersJCSCache расширяет SpringBeanAutowiringSupport. Забудьте поместить это в код. – bigster