2010-08-26 15 views
48

Dies ist eine relativ offene Frage. Wenn ich eine Anwendung in einem Projekt in Eclipse erstellt habe und dieses Projekt dann testen möchte, sollte ich den JUnit-Code innerhalb desselben Projekts erstellen oder ein separates Projekt erstellen. Zum Beispiel ...Eclipse Junit Test im selben Projekt

ShopSystem vielleicht der Name meines Hauptprojekts - sollte ich ein Projekt namens say, ShopSystemTest erstellen?

Im Allgemeinen - wie weit "entfernt" sollte der Testcode aus dem Hauptprojektordner gespeichert werden? Wenn ich speichere den Testcode im Hauptprojekt und dann das Hauptprojekt als runnable jar exportiert es den Testcode mit ihm nehmen, was nicht ideal ist ...

Verbesserungsvorschläge?

Antwort

59

Während es nicht nur den richtigen Weg gibt, ist der übliche Ansatz, Komponententests im selben Projekt zu halten.

Sie können einen zweiten Quellordner (wie test) erstellen, in den Sie Ihre Testklassen in die gleichen Pakete wie die zu testenden Klassen einfügen. Auf diese Weise können Sie auch Paket-private Klassen testen, ohne Ihre Haupt-Quellpakete mit Testklassen zu überfluten.

Ihr Quellordner/Paketstruktur würde dann wie folgt aussehen:

-sources 
    -main 
     -my.package 
      -MyClass.java 
    -test 
     -my.package 
      -MyClassTest.java 

Anschließend können Sie konfigurieren Ihr Build nicht schließen die test Quellordner, wenn die JAR-Verpackung.

4

Normalerweise haben Sie -

/src/main/java (for codes) 

/src/test/java (for tests) 
3

die Maven Weise vor: In einem Maven-Projekt werden soruces auf diese Weise organisiert

src 
|--main 
|  |--java 
|--test 
     |--java 

Ihr Quellcode in src/main/java geht, Ihre junit Der Testcode geht in src/test/java, beide sind Quellordner (und als Konsequenz können Sie Ihren jUnit-Code in dasselbe Paket wie Ihren Java-Code einfügen, aber in einen anderen Quellordner).

Das Interesse ist, dass für die übliche Codierung, Ihre jUnit-Klassen in Code-Pakete sind, aber auf JAR-Erstellung können Sie Klassen nur aus src/main/java kommen und nicht Ihre Tests freigeben.

19

Ich mag die Maven-Konvention viel: Es gibt einen separaten Quellbaum für Haupt- und Test im selben Projekt, wird Haupt-Code bereitgestellt, Code-Test nicht. Paketstrukturen können (müssen aber nicht) identisch sein.

project 
    src 
     main 
      java  // source files 
      resources // xml, properties etc 
     test 
      java  // source files 
      resources // xml, properties etc 

Und in Eclipse, wenn Sie new -> JUnit test case wählen, ändern Sie einfach den Quellordner in src/test/java und lassen Sie das Paket vorgeschlagen, wie ist.

(Einer der Vorteile der in der gleichen Verpackung verbleibende Zugang zu geschützten und Paket scoped Mitglieder, obwohl dies nicht ‚richtige‘ ist das Verhalten Unit-Test)


Update: Hier einige Code meinen letzten Punkt zu illustrieren:

Hauptklasse (in src/main/java):

package com.test; 
public class Foo{ 

    static class Phleem{ 
     public Phleem(final String stupidParameter){ 
     } 
    } 

    String bar; 
    protected String baz; 
    protected Object thingy; 

} 

Test-Klasse (in sr c/test/java):

+0

"Zugriff auf geschützte und paketorientierte Mitglieder" - Um Zugriff auf geschützte Mitglieder zu haben, müssten Sie die zu testende Klasse unterklassifizieren. Was Sie meinen, ist in der Lage, auf paketorientierte Klassen zuzugreifen, richtig? – Henning

+0

Oh, und auch Mitglieder, natürlich hast du Recht. Ich habe default-scoped Mitglieder so selten verwendet, dass ich manchmal vergesse, dass sie existieren. – Henning

+0

Autsch! Ich kannte keinen 'geschützten' Zugriff von anderen Klassen im gleichen Paket. Okay, das macht die Dinge klar, danke. – Henning

Verwandte Themen