@Autowired mit JUnit-tests.
Ive mit JUnit, aber einige tests haben einige Probleme, diese tests haben die @Autowired-annotation innerhalb der Spring-Bean und wenn ich mich auf Sie, die Bohnen, die @Autowired waren immer NULL.
Hier ist der Beispiel code:
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
}
Beim aufrufen des Manager-Objekt die Feder erzeugt den proxy, sondern beim Zugriff auf die @Autowired parameterManager das Objekt null ist, und mit diesem Problem ich kann nicht testen, diese Methode.
Irgendeine Idee was dies verursacht? Warum wird das Objekt nicht bekommen, injiziert? Es funktioniert gut in den Kontext einer web-Anwendung, aber in der test-Kontext ist immer NULL.
InformationsquelleAutor bigster | 2014-10-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, Ihr unit-tests mit einer Feder-Läufer statt.
Lädt die config nur einmal und, wenn nötig, und es wird autowire Ihre junit-Klasse
InformationsquelleAutor Niels Bech Nielsen
Habe ich endlich eine Lösung gefunden zu meinem problem.
Finden diesen Beitrag SpringBeanAutowiringSupport nicht injizieren Bohnen in jUnit-tests. und so etwas tun die JUnit-tests funktioniert.
InformationsquelleAutor bigster
Sieht für mich wie ParametersJCSCache ist nicht ein Spring managed bean. Sie brauchen, um dieses eine Spring-bean und autowire es in der Manager
Änderung:
Wenn ParametersJCSCache ist eine non-Spring managed bean wie auf der Erde kann IParameterManager injiziert werden, die von Frühling?
Das ist das Geheimnis, das funktioniert, dass beim Aufruf der gleiche code wenn ich in einem web-Kontext. Mit JUnit nicht das gleiche Verhalten. Und die ParametersJCSCache-Klasse erweitert die SpringBeanAutowiringSupport. Vergessen Sie diese in den code.
Naja es funktioniert nicht so, wie Sie denken, es funktioniert.
cant nutzen wir die vorhandenen autowired-Konfigurationen im test? Jeder Weg, es zu tun ?
InformationsquelleAutor Alan Hay