Ich benutze Play 2.4.6 mit Compile Time Dependency Injection und ScalaTest. Der Konstruktor des Controllers hat wenige Parameter und ich erstelle ihn in einem ApplicationLoader. Hier ist der Code:
%Vor%Wenn ich den Test ausführe, erhalte ich den folgenden Fehler:
%Vor% FakeApplication
verwenden GuiceApplicationBuilder
, was natürlich nicht funktioniert.
Was soll ich tun, um solche Tests durchzuführen?
Danke
Sie erhalten einen Fehler, weil die Tests nicht einmal in der Lage sind, eine Anwendung zu starten. Dies geschieht, weil Sie Dependency Injection in Ihren Controllern verwenden (wie die Fehlermeldung anzeigt), und Sie müssen sie als classes
deklarieren, anstatt als objects
. Wie Sie in den Dokumenten sehen können:
Wenn Ihr Controller eine Abhängigkeit hat, die injiziert werden soll, sollten Sie die @Inject
Annotation in Ihrem Controller-Konstruktor verwenden (siehe auch die Dokumente ). Pro Instanz:
Sie können auch die Zeitdokumente zur Zeitabhängigkeit kompilieren lesen, wenn Sie sie anstelle von Laufzeit-DI verwenden .
Ich stehe vor dem gleichen Problem wie du. Ich habe keine befriedigende Lösung, das Folgende ist nur ein Workaround: Ich landete schließlich
%Vor%in meiner WithApplicationLoader-Klasse
Ich habe auch Ссылка gefunden, mit dem Sie ws-Aufrufe vortäuschen können. Aber das wollen wir hier nicht.
Ich vermute, dass das Merkmal OneAppPerSuite
nicht Ihren benutzerdefinierten Anwendungslader verwendet. Sie müssen möglicherweise die Anwendungskonstruktion, die von diesem Merkmal stammt, außer Kraft setzen und dafür sorgen, dass Ihr benutzerdefinierter Lader verwendet wird.
sieht aus wie hier ein Beispiel mit scalatest: Ссылка
Tags und Links scala playframework scalatest