2011-10-17 4 views
7

Mam niestandardowy runner, który wysyła testy Junit przez połączenie z gniazdem do serwera Junit działającego na innym sprzęcie. Badania prowadzone zgodnie z założeniami z następującym docelowa:Uruchamianie Junit przez Ant nie wydaje się korzystać z niestandardowej klasy Runner

<target name="run"> 
     <mkdir dir="reports" /> 
     <junit fork="yes" haltonfailure="no"> 
      <test name="${CurrentTest}" /> 
      <formatter type="xml" /> 
      <classpath refid="mastersuite.classpath" /> 
     </junit> 

     <junitreport todir="${JunitReport.dir}"> 
      <fileset dir="."> 
       <include name="TEST-*.xml" />   
      </fileset> 
      <report todir="${JunitReport.dir}" /> 
     </junitreport> 
    </target> 

Kiedy jednak dodać w następującej <batchtest> elementu ...

<target name="run"> 
    <delete dir="reports" failonerror="false" />   
    <!-- Make the reports directory --> 
    <mkdir dir="reports" /> 

    <!-- Execute the tests and saves the results to XML --> 
    <junit fork="yes" printsummary="no" haltonfailure="no"> 
     <batchtest fork="yes" todir="${JunitReport.dir}"> 
      <fileset dir="${APITesting.classes}"> 
       <include name="test/api/**/*Test.class" /> 
      </fileset> 
     </batchtest> 
     <formatter type="xml" /> 
     <classpath refid="mastersuite.classpath" /> 
    </junit> 

    <!-- Compile the resulting XML file into an HTML based report. --> 
    <junitreport todir="${JunitReport.dir}"> 
     <fileset dir="${JunitReport.dir}"> 
      <include name="TEST-*.xml" /> 
     </fileset> 
     <report todir="${JunitReport.dir}" /> 
    </junitreport> 
</target> 

nic nie zostanie wysłane w ciągu do sprzętu, który mnie prowadzi aby sądzić, że adnotacja mojego @RunWith (com.company.name.RemoteTestCaseRunner.class) nie jest honorowana w kontekście <batchtest>. Czy jest coś, o czym zapomniałem, a może to musi być zrobione dodatkowo, aby moja anonimowa nazwa @RunWith została wywołana?

Testy są nadal uruchamiane, a raporty są tworzone, a niektóre testy, które nie są zależne od platformy, są uruchamiane i przekazywane, ale nie te, które wymagają komunikacji z usługami na docelowym sprzęcie.

UPDATE I ustalili, że to działa prawidłowo podczas korzystania @RunWith (Suite.class) połączonego z @SuiteClasses ({}), nie tylko jeśli wyraźnie dać to przypadek testowy. Więc teraz nie jestem pewien, gdzie leży problem.

UPDATE Chociaż nie znalazłem nic na ten temat stały, zachowanie moich testów wydają się sugerować, co następuje: w oparciu o sposób moje testy są sformatowane (rozciągają TestCase) Myślę Ant wykonuje moje przypadków testowych jako testy Junit3. Jak wspomniano powyżej, po uruchomieniu zestawu testów sformatowanego dla Junit4 (przy użyciu tylko adnotacji) moje testy działają i są wykonywane zgodnie z przeznaczeniem. Wygląda na to, że kiedy przekazuję testowany format Junit3 bezpośrednio, to wtedy moje adnotacje nie są honorowane, co oznacza, że ​​jest używany biegacz Junit3.

Moje nowe pytanie brzmi: czy istnieje sposób wyraźnego poinformowania mrówki o użyciu biegacza Junit 4?

Odpowiedz

7

Wygląda na to, że Ant automatycznie rozpoznaje, który runner należy użyć na podstawie tego, czy Twój przypadek testowy używa Junit4TestAdapter. I skończyło się na tym, aby dodać następującą metodę do wszystkich moich testów:

public class MyTestCase extends TestCase 
    public static junit.framework.Test suite() { 
     return new JUnit4TestAdapter(MyTestCase.class); 
    } 
    ... 
} 

Większość z was zapewne nie trzeba rozszerzyć TestCase, ale w moim przypadku jest to konieczne, ponieważ Junit4 działa jako klienta do Serwer Junit3.

+2

Muszę ci dać +100 za odpowiedź. Po 2 dniach wyszukiwania wydaje mi się, że to rozwiązuje mój problem !!! Mój oryginalny wpis http://stackoverflow.com/q/26848673/668650. –

+0

@KevinRave same tutaj! Naprawdę udało mi się naprawić mój problem, nie przedłużając już TestCase, ale nie pomyślałbym o tym bez informacji tutaj. – OpenSauce

+0

Cieszę się, że to pomogło komuś! –

Powiązane problemy