Schnelle Testausführung in einer gefälschten Anwendung von playframework

8

Ausführen von Tests wie beschrieben hier

%Vor%

ist unannehmbar langsam für mich. Dies liegt daran, dass die neue WithApplication das Framework bei jedem Beispiel startet und beendet. Versteht mich nicht falsch, ein Framework selbst lädt sehr schnell, aber wenn die Datenbank konfiguriert ist (Überraschung!), Wird die Situation schrecklich.

Hier sind einige Messungen:

%Vor%

Ausführungszeit: 2 Sekunden . Der gleiche Test mit WithApplication in jedem Beispiel verbraucht 9 Sekunden

Ich konnte viel bessere Ergebnisse erzielen dank dieser Antwort

%Vor%

}

Pros: Leistungssteigerung

Nachteile:

  • muss Setup- und Abbruchcode kopieren und einfügen, weil ich nicht weiß, wie Wiederverwendung (durch Wiederverwendung ich meine etwas wie "Klasse MySpec erweitert Spezifikation mit NoWasteOfTime "

  • new WithApplication () ruft Helpers.running auf, das so aussieht

%Vor%

so kann ich Helpers.running Verhalten (resetClient ist für meinen Code nicht sichtbar) ohne Reflexion nicht vollständig emulieren.

Bitte schlagen Sie vor, wie Sie Nachteile oder einen anderen Ansatz, wie mein Problem zu lösen, zu brechen.

    
Jeriho 27.11.2013, 22:56
quelle

1 Antwort

9

Ich weiß nicht, ob es die bestmögliche Lösung ist, aber in diesem Thread: Code vor und nach der Spezifikation ausführen

Sie können eine Lösung für wiederverwendbaren Code lesen. Ich habe es mit kleinen Änderungen implementiert. Für mich wurde der beforeAll-Schritt nicht ausgeführt und der sequential -Modifikator hinzugefügt.

%Vor%

Ich denke, die map wäre besser mit Step(...) ^ fragments ^ Step(...) , aber es lief nicht die beforeAll für mich. Das Benutzerhandbuch ( Ссылка ) bei "Global setup / teardown" besagt, dass ein Lazy Val verwendet werden soll.

Insgesamt war es ein Schmerz, dies aufzustellen. Mein Problem war %Code% Oder

Exception in thread "Thread-145" java.net.SocketException: Connection reset

Bei der Wiederverwendung der gleichen FakeApplication: Configuration error[Cannot connect to database [default]] (Configuration.scala:559)

Ich denke, dass es auf diese Weise viel logischer ist, als immer eine neue Anwendung für jeden "in" -Block zu erstellen oder alle Tests in einen Block einzufügen.

    
Lajos Gerecs 28.11.2013, 17:11
quelle