Soru Karınca kullanarak “saf” JUnit 4 testleri


Hem JUnit 4 hem de 1.7 karşıtıydık.

Testler tutulmada iyi çalışır, ancak karıncaları kullanarak testleri çalıştırırken ek açıklamalar göz ardı edilir.

Ant hain görevine göre belgeleme:

Ayrıca, JUnit 4.0 ile birlikte, sadece ek açıklamaları ve JUnit4TestAdapter kullanmadan "saf" JUnit 4 testleri de dahil olmak üzere çalışır.

Ancak, belgelerin nasıl yapılandırılması gerektiği konusunda ayrıntılı bir açıklama yoktur.

Junit görevi için gereken özel bir ayar var mı? Bir şey mi eksik? TestCase'i (yani 3.8 stili) ve "saf" Junit 4 testlerini genişleten Testlerimiz var, bu sorun olabilir mi?


23
2018-03-11 17:08


Menşei




Cevaplar:


Ant ile saf JUnit4 testleri kullanıyorum.

Yapım dosyasımın ilginç bir kısmı:

<junit printsummary="yes" haltonfailure="yes">
    <formatter type="xml"/>
    <classpath refid="path.test"/>
    <batchtest fork="yes" todir="${dir.report.unittests.xml}">
        <fileset dir="src">
            <include name="**/*Test*.java"/>
        </fileset>
    </batchtest>
</junit>

Ant'ın lib dizinindeki junit.jar dosyasının en son sürümüne sahip olduğunuzdan emin olun. Bildiğim kadarıyla gerekli sürüm 1.7 veya üstü versiyonlarla birlikte geliyor ...


14
2018-03-11 17:13



Yani JUnit 4 bunu gerektirmese de, test sınıfları için bir adlandırma kalıbı kullanmaktan kaçınmanın bir yolu yok ("Test.java" gibi). - Jonik
@jonik Adlandırma desenini kullanmak zorunda değilsiniz, ancak JUnit'i, test sınıflarınızla aynı pakette bulunan testleri içermeyen ek sınıflara karşı çalıştırmaktan kaçınmanıza yardımcı olacaktır. Bunun gibi sınıflar JUnit çıkışında hatalar verecektir. - MikeD
Başlangıçta Test'in olduğu, ancak test sınıfları olmayan yardımcı program sınıflarınız varsa ne olur? Genellikle, "JUnit 4 kullanarak", "sınıf adı değil," Test notları testleri "anlamına gelir. Tüm .java dosyalarını dahil etmek mümkün olmalı ve bunlara sadece test edilmiş olanları çalıştırmalı. - Trejkaz
@Trejkaz Test dışı sınıfları sizin için filtreleyen yeni bir parametre eklendi. Bu bir Aşağıda cevapla. - Bryce


Karınca, varsayılan olarak JUnit 3 sürümü ile birlikte gelir. JUnit 3'ün test ek açıklamaları için desteği yoktur.

Junit görevinden JUnit 4 ek açıklamalarını kullanmak için cunit görevinin yuvalanmış bir classpath öğesinde JUnit 4 jarünün yerini sağladığınızdan emin olun (bkz. bu giriş karşılığında SSS).

<junit showoutput="yes" fork="true">
    <classpath>
        <!-- The location of the JUnit version that you want to use -->
        <pathelement location="lib/junit-4.9b1.jar"/>
    </classpath>

    <formatter type="plain" usefile="false" />

    <batchtest>
        <fileset dir="${tests.dir}"/>
    </batchtest>
</junit>

Bu, ANU_HOME / lib'de ant-junit.jar'ın üzerine yazılması için tercih edilen bir çözümdür, çünkü JUnit jar'ınızı kaynak kontrolünüzde kodunuzun yanında yükseltmeleri daha sonraki sürümlere kolaylaştırabileceğiniz anlamına gelir.

Yukarıda dosya kümemde herhangi bir ek kalıp belirtmediğimde, cunta görevinin, bu dizin yapısındaki tüm sınıflara karşı JUnit'i çalıştırmayı deneyeceği anlamına gelir. Bu, içermeyen bir dizi sınıfın dahil edilmesine neden olabilir. Kaynak dosyalarınızı nasıl yapılandırdığınıza bağlı olarak herhangi bir test.


7
2018-03-22 15:48



Debian'da tam olarak aynı sorunu yaşıyorum: karınca 1.8.0, junit 4.10, junit-4.10.jar için sınıf yolu cunta görevinin bir parçası olarak eklendi ve yine de @Task ek açıklamaları tanınmıyor, sadece başlangıç ​​yöntemlerini yeniden adlandırıyor test * ile çalışır ... - Marcus Junius Brutus
@MenelaosPerdikeas Demek istediniz mi? @Task? Kullanmanı beklerdim @Test ek açıklama olarak. Kullandığınızı varsayarak @Test -v bayrağıyla karınca koşmayı deneyin ve cunta görevinin çıktısı bir sınıf yolunu gösterecektir. Daha sonra, göreve eklediğiniz junit-4.10.jar sınıf yolunun mevcut olduğundan emin olabilirsiniz. Bu sorunu teşhis etmeye çalışırken -v gerçekten yararlı buldum. - MikeD
Ben tam olarak bu vardı <junit> hariç fork="true" seçeneği. Bu seçeneği eklemek benim için çözdü. - Darkhogg


Sonunda sadece testler bulabilir ve uygulayabilirsiniz. skipNonTests 1.9.3+ karınca eklenmiş parametre!

Yukarıdaki kabul edilen yanıtın kod snippet'i (yeni olanlar hariç) skipNonTests parametre ve dosya adı gereksinimindeki "Test" ten kurtulmak):

<junit printsummary="yes" haltonfailure="yes">
    <formatter type="xml"/>
    <classpath refid="path.test"/>
    <batchtest skipNonTests="true" fork="yes" todir="${dir.report.unittests.xml}">
        <fileset dir="src">
            <include name="**/*.java"/>
        </fileset>
    </batchtest>
</junit>

3
2017-08-05 21:44



Evet, sonunda bunu ekledikleri harika. Şimdi eğer her şeyi-eğer-karınca-her-ele geçirebilirlerse, Karınca aslında güzel bir araç olabilir. Haha. - Trejkaz


Bu başıma geldi ve hem ek açıklamaları hem de TestCase'i genişletmemin sebebiydi.

public class TestXXX extends TestCase {

    @Test
    public void testSimpleValidCase() {
        // this was running
    }

    @Test
    public void simpleValidCase() {
        // this wasn't running
    }
}

TestCase'i genişlettiğinizde JUnit3 stilini varsayıyorsunuz, bu yüzden JUnit4 ek açıklamaları yok sayılıyor.

Çözüm, TestCase'i genişletmeyi bırakmaktır.


2
2018-03-21 12:08





Sınıf yolu tanımınızı doğrulayın ... Bu benim problemimi çözdü.

<path id="classpath" description="Classpath do Projeto">
    <fileset dir="${LIB}">
        <include name="**/*.jar" />
        <exclude name="**/.SVN/*.*"/>
    </fileset>
</path>

1
2018-02-27 22:31





Bu, genel karınca kodumun ilgili kısmı ... size yardım edip etmeyeceğinden emin değil ..

 <junit fork="true"
        forkmode="once"
        haltonfailure="false"
        haltonerror="false"
        failureproperty="tests.failures"
        errorproperty="tests.errors"
        includeantruntime="true"
        showoutput="true"
        printsummary="true">
     <classpath>
         <path refid="path-id.test.classpath.run"/>
     </classpath>

     <formatter type="xml"/>

     <batchtest fork="yes"
                todir="${dir.build.testresults}">
         <fileset dir="${dir.src.tests}">
             <include name="**/*Test.java"/>
         </fileset>
     </batchtest>
 </junit>

0
2018-03-11 17:15





Bu notu diğer sınıflara uygula org.junit.Ignore


0
2017-12-13 09:45





Ayrıca JUnit4TestAdapter olmadan JUnit 4.0 ile testler yapmaya çalıştım, yani yöntemsiz
    kamu statik junit.framework.Test paketi () {         yeni JUnit4TestAdapter (SomeTestClass.class) döndürün;     }

1.9.4 karınca kullanıyorum. Koşu ant testi verbose (ant -v) gösterir

[VMit] Aynı VM'de birden fazla test çalıştırılıyor
    [junit] /usr/share/java/junit.jar:/usr/sharejava/ant-launcher.jar:/usr/share/java/ant.jar:/usr/share/java/ant/ant-junit ifadesini ekleyerek .jar to CLASSPATH

Aha, ama yine de bazı anti-junit-görev var. Buna ek olarak indiriliyor örtülü olarak eklenmeyen /usr/share/java/ant/ant-junit4.jar. Bunu açıkça ekledim:

<junit printsummary="yes" 
    fork="yes" 
    forkmode="once"
    maxmemory="1023m" 
    showoutput="no">
    ...
   <classpath>
     <pathelement path="...:${junitJar}:${hamcrestJar}:/usr/share/java/ant/ant-junit4.jar" />
   </classpath>
...
</junit>

ve çalıştı. Olmadan: hayır. Bu çözümün hiç de güzel olmadığını biliyorum.


0
2018-04-28 22:57