2016-07-21 2 views
1

HintergrundNicht in der Lage mit ant alle JUnit-Tests in einer Kategorie laufen

ich ein Ant-Skript zu erstellen Ich versuche, die:

  • Quelldateien
  • kompiliert junit kompiliert Tests
  • Run-Junit-Tests einer bestimmten Kategorie

Das meiste von dem, was ich soweit gemacht, wurden aus this question entnommen.

Dies ist, was ich in meinem Ant-Skript haben bisher:

<?xml version="1.0"?> 
<project name="junit_tests"> 
    <property name="build-main" location="build/main"/> 
    <property name="build-test" location="build/main"/> 
    <property name="src-test" value="java/test" /> 
    <property name="src-com" value="java/com" /> 
    <property name="src-lib" value="webapp/WEB-INF/lib" /> 
    <property name="test-lib" value="java/test/lib" /> 
    <path id="classpath"> 
    <fileset dir="${src-lib}" includes="*.jar"/> 
    <fileset dir="${test-lib}" includes="*.jar" /> 
    </path> 
    <path id="classpath.test"> 
    <path refid="classpath"/> 
    <pathelement location="${build}"/> 
    </path> 
    <target name="init"> 
    <mkdir dir="${build-main}" /> 
    <mkdir dir="${build-test}" /> 
    </target> 

    <target name="compileSrc" depends="init" description="compile src files "> 
    <javac debug="on" destdir="${build-main}" encoding="UTF-8" fork="true" memorymaximumsize="1024m" includeantruntime="true"> 
     <src path="${src-com}" /> 
     <classpath refid="classpath"/> 
    </javac> 
    <javac debug="on" destdir="${build-main}" encoding="UTF-8" fork="true" memorymaximumsize="1024m" includeantruntime="true"> 
     <src path="${src-test}" /> 
     <classpath refid="classpath"/> 
    </javac> 
    </target> 


    <!-- Test and build all files --> 
    <!-- To run this: use "ant" (default) or "ant run" --> 
    <target name="run" depends="compileSrc"> 
    <junit printsummary="on" haltonfailure="no" fork="true"> 
     <classpath> 
      <path refid="classpath.test" /> 
      <pathelement location="${build-test}"/> 
     </classpath> 
     <formatter type="xml" /> 
     <batchtest> 
      <fileset dir="${build-main}" includes="**/NonDBTest.class" /> 
     </batchtest> 
    </junit> 
    </target> 
</project> 

Ausgabe von JUnit Aufgabe

Lauf: [junit] ACHTUNG: mehrere Versionen von Ameise in Pfad erkannt für junit [junit] jar: file: /usr/local/Cellar/ant/1.9.7/libexec/lib/ant.jar! /org/apache/tools/ant/Project.class [junit] und jar: Datei: /Users/arnab/work/my_project/webapp/WEB-INF/lib/ant.jar!/org /apache/tools/ant/Project.class [junit] Lauf test.NonDBTest [junit] Tests ausführen: 2, Fehler: 0, Fehler: 2, Skipped: 0, die verstrichene Zeit: 0,178 sec

BUILD ERFOLGREICH Gesamtzeit: 37 Sekunden

Problem Die Testklasse, die in dieser Kategorie ist NonDBTest insgesamt 7 Tests hat, so junit ist eindeutig nicht alle von ihnen laufen.

NonDBTest.java ist nur eine Schnittstelle ohne Methoden, und das ist, was meine Testklasse sieht aus wie

@Category(NonDBTest.class) 
public class MyTestClass extends AbstractTestCase{ 
.... 

@Test 
public void testA(){ ... } 

@Test 
public void testB(){ ... } 

@Test 
public void testC(){ ... } 

@Test 
public void testD(){ ... } 

@Test 
public void testE(){ ... } 

} 

Frage Was mache ich falsch? Ich habe versucht, NonTestDB zu einer Klasse zu ändern. Ich habe versucht, die Schnittstelle zu implementieren, aber nichts hat bisher funktioniert. Wie kann ich junit alle Klassen, die in der Kategorie NonTestDB sind, laufen lassen? Fehle ich etwas?

+0

Ich habe eine Antwort zu Ihrer verknüpften [Frage] (http://stackoverflow.com/a/42000110/1183010) hinzugefügt, die es ermöglicht, Tests einer bestimmten 'Kategorie' über ant durchzuführen. –

Antwort

0

Die Verwendung von JUnit-Kategorien ist einfacher mit maven, da Sie dann die Kategorien konfigurieren können, die über das group-Attribut ausgeführt werden.

Ich bezweifle, gibt es explizite Unterstützung für die Kategorien in ant, und ich glaube nicht, können Sie include eine JUnit Kategorie Schnittstelle in der Testaufgabe (wie Sie scheinen zu tun).

Die Arbeit um ist auch ein JUnit für Ihre Kategorie, Suite und dann zu erstellen, um nur diese Suite von der Ameise Ziel laufen:

@RunWith(Categories.class) 
@IncludeCategory(NonDBTest.class) 
@SuiteClasses({ MyTestClass1.class, MyTestClass2.class }) 
public class NonDBTestSuite { 
    // will run only tests annotated with NonDBTest from 
    // MyTestClass1 and MyTestClass2. 
} 

Dann sollten Sie Ihre ant Konfiguration zeigen, dass die NonDBTestSuite sein sollte hingerichtet.

<fileset dir="${build-main}" includes="**/NonDBTestSuite.class" /> 

Beachten Sie, dass die answer Sie beziehen sich auch diese Suite definiert hat.

Der nicht so nette Teil davon ist, dass Sie alle Suite-Klassen pflegen müssen. Was ich mit mehreren Kategorien gemacht habe, ist eine AllTests Suite mit alle Testklassen. Kleinere Suiten würden dann diese AllTests in der SuiteClasses Annotation verwenden.

Verwandte Themen