Führen Sie JUnit-Tests aus einem Abhängigkeitsjar in Eclipse aus

9

Ich habe einige JUnit-Tests in .jar , die als Bibliothek verwendet werden sollen. Die Bibliothek enthält einige Tests, die ausgeführt werden sollten, wenn die Bibliothek in einem anderen Projekt verwendet wird.

Wenn ich jedoch ein neues Projekt mit der Bibliothek erzeuge und JUnit in Eclipse starte, dann werden die Tests in der Abhängigkeit .jar nicht ausgeführt / vom JUnit-Test-Runner nicht erkannt. Ich bekomme die Nachricht:

%Vor%

Gibt es eine Möglichkeit, die Abhängigkeit .jar so zu konfigurieren, dass die Tests neben allen Tests ausgeführt werden, die im Hauptprojekt enthalten sein könnten?

Grundsätzlich möchte ich, dass die Abhängigkeit .jar die Tests in die Projekte "exportiert", in denen sie verwendet wird.

Ich verwende Eclipse Juno, JUnit 4.10 und Maven für die Abhängigkeitsverwaltung.

BEARBEITEN:

Der Sinn dieser Bibliothek besteht darin, dass Sie in der Lage sind, Projekte zu testen, die sie verwenden - d. h. sie führt spezielle Tests durch. Deshalb möchte ich in der Lage sein, die Bibliothek .jar zu importieren und die zusätzlichen Tests zum importierenden Projekt beizutragen.

    
mikera 29.08.2012, 10:26
quelle

5 Antworten

2

Ich denke, dass das Erstellen einer Bibliothek von Komponententests ( @Test annotierte Methoden) eine schlechte Idee ist. Es ist jedoch eine gute Idee, eine Bibliothek wiederverwendbarer Testkomponenten zu erstellen. Wir haben dies in ein paar Open-Source-Projekten getan, und Sie können einen Blick darauf werfen, wie es funktioniert.

  1. Ein Maven-Modul exportiert Testkomponenten (wir nennen sie "mocks") aus src/mock/java directory. Das exportierte Artefakt hat -mock classifier. Siehe rexsl / pom.xml (achten Sie auf markierte Zeilen).

  2. Mock-Artefakte werden zusammen mit üblichen Artefakten in Maven Central bereitgestellt: Ссылка (achten Sie auf ...-mock.jar Dateien)

  3. Module, die diese Mocks benötigen, können sie als übliche Artefakte enthalten, zum Beispiel rexsl-core / pom.xml (siehe hervorgehobene Zeilen):

  4. Verwenden Sie dann in Ihren Unit-Tests einfach die Klassen aus diesen Mock-Bibliotheken, wie z. B. normale Mock-Builder, zum Beispiel: BulkHttpFeederTest

So können Sie Ihre Testartefakte auf elegante Weise wiederverwenden. Hoffe es hilft.

    
yegor256 10.09.2012, 15:16
quelle
4

Sie können Maven Surefire ausprobieren.

In einigen Fällen wäre es nützlich, eine Reihe von Tests zu haben, die mit verschiedenen Abhängigkeitskonfigurationen laufen. Eine Möglichkeit, dies zu erreichen, wäre ein einzelnes Projekt, das die Komponententests enthält und ein Test-Jar generiert. Mehrere Testkonfigurationsprojekte könnten dann die Komponententests konsumieren und sie mit unterschiedlichen Abhängigkeitssätzen ausführen. Das Problem besteht darin, dass es keine einfache Möglichkeit gibt, Tests in einem Abhängigkeitsjar auszuführen. Das Surefire -Plugin sollte eine Konfiguration haben, die es mir erlaubt, alle oder einen Satz von Komponententests auszuführen, die in einem Abhängigkeitsjar enthalten sind.

Dies kann folgendermaßen geschehen ( Junit 3 ):

Stellen Sie sicher, dass das Test-Jar eine Klasse enthält, die über eine statische suite () -Methode

verfügt %Vor%

Dann im Projekt mit der Test-Jar-Abhängigkeit: Erstellen Sie ein Testfall :

%Vor%

Jetzt werden die Tests gefunden.

    
Biplab Mitra 06.09.2012 10:21
quelle
1

@Mikera,

Ich finde, dass Ihnen das helfen kann. Erweitern Sie einfach die Testfall-Klasse zu einer Ihrer Java-Klassen im Projekt, und Sie können diese bestimmte Klasse ausführen, um sie als JUnit-Test auszuführen.

    
quelle
1

Ich bin mir nicht sicher, ob dies wünschenswert ist. - Wenn Sie zum Beispiel ein Glas verwenden, kann sein Verhalten durch den externen Kontext beeinflusst werden, z. andere Bibliotheken im Klassenpfad. Aus dem Inneren des Gefäßes gibt es keine einfache Möglichkeit, diesen Kontext zu analysieren und die Tests entsprechend anzupassen. Wenn Sie dagegen eine Bibliothek schreiben und kompilieren, sollten Sie sie testen, bevor Sie sie als Jar verpacken. Vielleicht möchten Sie sogar Ihre Tests nicht einschließen.

Wenn es Ihnen wirklich wichtig ist, die Tests erneut auszuführen, würde mich interessieren, was sie zum Scheitern bringen könnte, ohne das Glas zu wechseln. In diesem Fall sollten Sie jedoch den Tester erweitern. Soweit ich weiß, verwendet es Reflexion. Sie können ganz einfach Gläser in einem Klassenlader laden und alle ihre Klassen durchlaufen. Durch Reflexion können Sie die Testklassen identifizieren und Testsuits zusammenstellen. Sie könnten in den Tester für ein Beispiel schauen. Trotzdem müssten Sie diesen Prozess von außen beginnen, z. von innerhalb einer Ihrer Testklassen im Kundenprojekt. Hier könnte der Ansatz von QATest hilfreich sein: Durch die Bereitstellung einer überschriebenen Version von Testsuite oder Testrunner könnten Sie dies automatisieren - wenn der Client Ihre überschriebene API verwendet.

Lassen Sie mich wissen, ob dieser ziemlich kostspielige Ansatz in Ihrem Szenario anwendbar zu sein scheint und ich Codebeispiele bereitstellen kann.

    
oerich 05.09.2012 04:41
quelle
0

Warum sollte der Benutzer des Glases die Testfälle innerhalb des Glases laufen lassen !!! Wenn das Glas verpackt und geliefert wird, bedeutet dies, dass die Komponententests erfolgreich ausgeführt werden. In der Regel sollte das Glas selbst entweder als separates Projekt oder als eines der Module behandelt werden. In beiden Fällen werden Unit-Testfälle ausgeführt, bevor sie ausgeliefert werden.

    
learninghuman 10.09.2012 09:09
quelle