web-dev-qa-db-fra.com

Test Eclipse Junit dans le même projet

C'est une question relativement ouverte. Si j'ai créé une application dans un projet dans Eclipse et que je souhaite ensuite tester ce projet, dois-je créer le code JUnit dans le même projet ou créer un projet distinct. Par exemple...

ShopSystem peut-être le nom de mon projet principal - dois-je créer un projet appelé disons, ShopSystemTest?

En général - jusqu'où "loin" le code de test doit-il être stocké depuis le dossier principal du projet? Si je stocke le code de test dans le projet principal, puis que j'exporte le projet principal sous forme de fichier exécutable, il emportera le code de test avec lui, ce qui n'est pas idéal ...

Suggestions?

54
david99world

Bien qu'il n'y ait pas que la bonne façon, l'approche habituelle consiste à conserver les tests unitaires dans le même projet.

Vous pouvez créer un deuxième dossier source (comme test), où vous placez vos classes de test dans les mêmes packages que les classes sous test. Cela vous permet également de tester des classes privées de package sans inonder vos principaux packages source de classes de test.

La structure de votre dossier/package source ressemblerait alors à ceci:

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

Vous pouvez ensuite configurer votre build pour ne pas inclure le dossier source test lors de la compression du JAR.

67
Henning

J'aime beaucoup la convention maven: il y a une arborescence source distincte pour main et test dans le même projet, le code principal est déployé, le code de test ne l'est pas. Les structures de package peuvent être (mais ne doivent pas être) identiques.

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

Et dans Eclipse, lorsque vous choisissez new -> JUnit test case, vous changez simplement le dossier source en src/test/Java et laissez le paquet suggéré tel quel.

(L'un des avantages de rester dans le même package est d'avoir accès aux membres protégés et au package, bien que ce ne soit pas un comportement de test unitaire "correct")


pdate: Voici du code pour illustrer mon dernier point:

Classe principale (dans 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;

}

Classe de test (en src/test/Java):

package com.test;
import org.junit.Test;

public class FooTest{

    @Test
    public void testFoo(){
        final Foo foo = new Foo();
        foo.bar = "I can access default-scoped members";
        foo.baz = "And protected members, too";
        foo.thingy = new Foo.Phleem("And I can access default-scoped classes");
    }

}
21
Sean Patrick Floyd

En général, vous avez -

/src/main/Java   (for codes)

/src/test/Java   (for tests)
5
fastcodejava

Considérez la méthode maven: dans un projet maven, les soruces sont organisées de cette façon

src
 |--main
 |     |--Java
 |--test
       |--Java

Votre code source va dans src/main/Java, votre code de test junit va dans src/test/Java, ils sont tous les deux le dossier source (et en conséquence, vous pouvez mettre votre code jUnit dans le même paquet que votre Java code, mais dans un dossier source différent).

L'intérêt est que pour le codage habituel, vos classes jUnit sont dans des packages de code, mais lors de la création de jar, vous pouvez prendre des classes provenant uniquement de src/main/Java et ne pas publier vos tests.

4
Riduidel