2

Ich denke, der Titel ist sehr spezifisch, aber ich werde etwas Kontext von dem, was ich tue, teilen.Kann ich Abhängigkeiten in einen benutzerdefinierten Spring TestExecutionListener injizieren?

Ich erstelle eine Implementierung der TestExecutionListener-Schnittstelle, um einige allgemeine Datenbankaktionen für meine Tests zu abstrahieren.

Das Problem, das ich habe, ist, dass ich ein Objekt, das im Listener konfiguriert ist, auf die tatsächliche Einheit Tester freilegen muss.

Ich kann das entweder tun, indem Sie den Kontext vom TestExecutionListener manipulieren und eine neue Singleton-Bean hinzufügen (was nicht funktioniert).

Oder ich kann versuchen, das gemeinsame Objekt woanders zu verschieben, aber dann muss ich das Locator-Objekt in den Unit-Test und den Listener injizieren. Autofahren scheint dort nicht zu funktionieren.

Irgendwelche Gedanken oder eine alternative Lösung?

Antwort

0

Ich würde besser dieses gemeinsame Objekt als Bean in einem bestimmten Kontext Konfigurationsklasse konfigurieren und es dann für Testklassen zur Verfügung stellen mit @ContextConfiguration(classes = TestConfig.class)

Andernfalls, wenn Sie wirklich dieses Objekt in Ihrem TestExecutionListener konfigurieren müssen, können Sie Registriere diese Bean irgendwo in deiner Kontextkonfiguration, dann führe sie automatisch in deinen TestExecutionListener und ändere ihren Status hier. Aber es scheint eher ein Hack als eine Lösung zu sein.

+0

Es scheint, dass ich etwas von Ihrer Antwort vermisse. Lassen Sie mich ein wenig verdeutlichen, ich habe am Ende eine Bean in einer getrennten Konfigurationsklasse hinzugefügt, die aus der Testklasse importiert wird. Das funktioniert gut. Das Problem, das ich jetzt habe, ist, dass ich nicht innerhalb des TestExecutionListener autowire kann, also verwende ich den Testkontext, um nach der Bohne zu suchen. Es funktioniert, aber ich würde eine Annotation-basierte Injektion bevorzugen. –

+1

werfen Sie einen Blick auf meine Antwort auf die folgende Frage: https://stackoverflow.com/questions/42204840/spring-dependency-injection-into-spring-testexecutionlistener-not-working/44541083#44541083 Sie können Bohnen für TestExecutionListener autowire using testContext.getApplicationContext() .getAutowireCapableBeanFactory(). autowireBean (this); in der beforeTestClass-Methode. Es werden alle Beans, die Sie in Ihrem TestExecutionListener @Autowired deklariert haben, automatisch in die Warteschlange gestellt. –

Verwandte Themen