JUnit test senaryolarını komut satırından çalıştırma


333

Komut satırından JUnit test senaryoları çalıştırmak istiyorum. Bunu nasıl yapabilirim?


benzer android junit sorusu: stackoverflow.com/q/11144466/611007
n611x007

android dokümanlar: bir cihazda veya taklitçide testler yürütme (komut satırından). ( andreea.sandu aracılığıyla )
n611x007

JUnit 5 için
yanıt

javac -cp "junit-4.12.jar; hamcrest-core-1.3.jar;." Tests.javabenim için çalıştı. Bitiş noktasını not edin - önemli!
parsecer

Yanıtlar:


274

İçin JUnit 5.x öyle:

java -jar junit-platform-console-standalone-<version>.jar <Options>

Kısa bir özeti https://stackoverflow.com/a/52373592/1431016 adresinde ve tüm ayrıntıları https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher adresinde bulabilirsiniz.

İçin JUnit 4.X gerçekten var:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

Ancak JUnit 3.X kullanıyorsanız sınıf adının farklı olduğunu unutmayın:

java -cp .:/usr/share/java/junit.jar junit.textui.TestRunner [test class name]

Sınıf yoluna sınıf dosyalarınızla daha fazla JAR veya dizin eklemeniz ve bunu noktalı virgül (Windows) veya iki nokta üst üste (UNIX / Linux) ile ayırmanız gerekebilir. Ortamınıza bağlıdır.

Düzenleme: Geçerli dizini örnek olarak ekledim. Ortamınıza ve uygulamanızı nasıl oluşturduğunuza bağlıdır (bin / veya build / veya my_application.jar vb. Olabilir). Not Java 6+ sınıf yolunda globları destekliyor, şunları yapabilirsiniz:

java -cp lib/*.jar:/usr/share/java/junit.jar ...

Umarım yardımcı olur. Testler yazın! :-)


@Izap Bir testin JUnit4 veya JUnit3 kullanıp kullanmadığını programlı olarak belirlemek için herhangi bir fikir?
Goaler444

2
Sanırım Class.forName. Java'da son kez programlama yaptığım yıllar oldu ...
lzap

ve android kullanıyorsanız ne olacak?
n611x007

1
"-Cp" argümanı (örn. CLASSPATH) için belgeler burada (Java 7, Unix) ve burada (Öğretici) ve burada (Java 8, Unix) ve burada (Java 8, Windows) . Görünüşe göre sınıf yolundaki joker karakterler artık destekleniyor.
David Tonhofer

1
Downvote. JUnit 4.x için doğru değil. Talimatlarınız "Sınıf bulunamadı: [test class name]" "Sınıf yolunda [test class name] olsa bile.
Philip Rego

117

Maven yolu

Maven kullanıyorsanız, tüm test durumlarınızı çalıştırmak için aşağıdaki komutu çalıştırabilirsiniz:

mvn clean test

Veya aşağıdaki gibi belirli bir testi çalıştırabilirsiniz

mvn clean test -Dtest=your.package.TestClassName
mvn clean test -Dtest=your.package.TestClassName#particularMethod

Target \ surefire-raporlar klasöründeki rapor dosyaları yerine yığın izlemesini (varsa) konsolda görmek istiyorsanız, surefire.useFile kullanıcı özelliğini false olarak ayarlayın. Örneğin:

mvn clean test -Dtest=your.package.TestClassName -Dsurefire.useFile=false

Gradle yolu

Gradle kullanırsanız, tüm test durumlarınızı çalıştırmak için aşağıdaki komutu çalıştırabilirsiniz:

gradle test

Veya aşağıdaki gibi belirli bir testi çalıştırabilirsiniz

gradle test --tests your.package.TestClassName
gradle test --tests your.package.TestClassName.particularMethod

Daha fazla bilgi istiyorsanız, --stacktrace veya --info veya --debug gibi seçenekleri düşünebilirsiniz.

Örneğin, Gradle'ı bilgi günlüğü düzeyi --info ile çalıştırdığınızda, çalışırken her testin sonucunu gösterir. Herhangi bir istisna varsa, sorunun ne olduğunu gösteren yığın izini gösterecektir.

gradle test --info

Genel test sonuçlarını görmek istiyorsanız, raporu tarayıcıda açabilirsiniz, örneğin (Ubuntu'da Google Chrome'u kullanarak açın):

google-chrome build/reports/tests/index.html

Karınca yolu

Ant build file build.xml dosyanızı ayarladıktan sonra, JUnit test örneklerinizi aşağıdaki gibi komut satırından çalıştırabilirsiniz:

ant -f build.xml <Your JUnit test target name>

Ant yapı dosyasında JUnit testlerini yapılandırma hakkında daha fazla bilgi için aşağıdaki bağlantıyı takip edebilirsiniz: https://ant.apache.org/manual/Tasks/junit.html

Normal yol

Maven veya Gradle veya Ant kullanmıyorsanız, aşağıdaki yolu takip edebilirsiniz:

Her şeyden önce, test vakalarınızı derlemeniz gerekir. Örneğin (Linux'ta):

javac -d /absolute/path/for/compiled/classes -cp /absolute/path/to/junit-4.12.jar /absolute/path/to/TestClassName.java

Ardından test senaryolarınızı çalıştırın. Örneğin:

java -cp /absolute/path/for/compiled/classes:/absolute/path/to/junit-4.12.jar:/absolute/path/to/hamcrest-core-1.3.jar org.junit.runner.JUnitCore your.package.TestClassName

1
Bu cevabın birden fazla teknoloji, kudos için örnekleri olduğunu sevdim!
Josie Thompson

son yaklaşımı kullanan harika testlere ne dersiniz?
midori

1
İyi hak edilmiş altın rozet;)
Eric Duminil

Gradle sürümü için teşekkürler! Kudos!
ady

52

@Lzap'in verdiği cevap iyi bir çözümdür. Ancak, eklemeniz gerektiğini eklemek istiyorum. sınıf yoluna gidin, böylece geçerli dizininiz dışarıda kalmaz, böylece kendi sınıflarınız dışarıda kalır. Bu bazı platformlarda başıma geldi. Yani JUnit 4.x için güncellenmiş bir sürüm olurdu:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

1
bunun yarı kolon olması mı gerekiyor?
panny

14
@panny Windows'ta noktalı virgül. N * nix ortamında (en azından OSX ve kullandığım tüm Linux dağıtımları) iki nokta üst üste kullanırsınız.
rand_acs

1
@rand_acs Test sınıfı adının tam olarak sınıflandırılmış sınıf adı olması gerekiyor mu?
Goaler444

1
@ Goaler444 Evet, her zaman tam ad kullanıyorum, tüm ad alanları belirtildi.
rand_acs

22

Sınıf yolunuzda JUnit.jar olduğundan emin olun, sonra konsoldan komut satırı çalıştırıcısını çağırın

java org.junit.runner.JUnitCore [test sınıfı adı]

Referans: junit SSS


4
projenizin geri kalanını da sınıfının geri kalanına ayarlamanız gerekir.
Thilo

Bu, [test sınıfı adı] sınıf yolunda olsa bile "Sınıf bulunamadı: [test sınıfı adı]" değerini verir.
Philip Rego

19

JUnit 4.12 ile aşağıdakiler benim için çalışmadı:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

Görünüşe göre , JUnit 4.11'den itibaren hamcrest-core.jarsınıf yolunuza da dahil olmalısınız :

java -cp .:/usr/share/java/junit.jar:/usr/share/java/hamcrest-core.jar org.junit.runner.JUnitCore [test class name]

JUnit 4.12 ile aynı sorunu vardı. Benzer bir çözüm geldi, ama benim için işe yaramadı, JUnitCore yüklenemedi. Temelde JUnit 4.8.2'ye geçtim çünkü sınıfyoluna hamcrest-core.jar dosyasını içermesi gerekmiyor.
Vladimir Nazarenko

Bunun JUnit 4.12 ile yapılması gerektiğini doğruladı. +1.
rayryeng

Bu benim için çalıştı:java -cp .:/usr/share/java/junit4.jar org.junit.runner.JUnitCore [test class name]
Raffi Khatchadourian

11

Pencerelerde

java -cp .;/path/junit.jar org.junit.runner.JUnitCore TestClass [.class uzantısı olmayan test sınıfı adı]

örneğin: c:\>java -cp .;f:/libraries/junit-4.8.2 org.junit.runner.JUnitCore TestSample1 TestSample2 ...ve eğer birden fazla test sınıfı varsa.

-cp sınıf yolunu temsil eder ve nokta (.) mevcut sınıfyolunu temsil ederken, noktalı virgül (;) sınıf yoluna ek verilen kavanozu ekler, çünkü yukarıdaki örnekte junit-4.8.2 artık sınıf yolunda JUnitCore sınıfını çalıştırmak için kullanılabilir burada test sınıflarımızı yürüttük.

Yukarıdaki komut satırı ifadesi, komut isteminden (örn. MSDos) junit (sürüm 4+) sınamalarını yürütmenize yardımcı olur.

Not: JUnitCore, junit testlerini yürütmek için bir cephedir, bu cephe junit'in 4+ versiyonuna dahildir.


Lütfen cevabınızı kısaca açıklayınız.
Mohit Jain

Sizden cevabınızı kısa tutmanızı istemedim. Bazı açıklamalar (en azından kısa bir açıklama) eklemek istedi. Cevabınızın nasıl çalıştığını açıklamak iyi bir uygulamadır. Okuyucular bunu anlayabilir, beğen, onu oyla.
Mohit Jain

yani tamamlayıcı bir test kavanozum ve vanilya junit kavanozum olsaydı, her şeyin çalışması için java -cp komutunda ikisine de sahip olmalıyım? Tüm bunları bir komut satırına koymak zorunda kalmanın bir yolu var mı?
Ungeheuer

5

Aslında Junit testini çalıştırılabilir bir Kavanoz yapabilir ve çalıştırılabilir kavanozu java -jar olarak çağırabilirsiniz.


2
Eclipse'de, JUnit projenize sağ tıklayın -> Dışa
Aktar'a

4

Projeniz Maven tabanlıysa, sonraki komutu kullanarak 'my-module' modülüne ait test sınıfı CustomTest'ten tüm test yöntemlerini çalıştırabilirsiniz:

mvn clean test -pl :my-module -Dtest=CustomTest

Veya sonraki komutu kullanarak test sınıfı CustomTest'ten yalnızca 1 test yöntemi myMethod'u çalıştırın:

mvn clean test -pl :my-module -Dtest=CustomTest#myMethod

Bu yetenek için Maven Surefire Plugin v.2.7.3 + ve Junit 4'e ihtiyacınız var. Daha fazla ayrıntı burada: http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html


4

Şahsen bunu yapmak için Maven güzelliğinde JUnit koşucusunu kullanırdım.



-1

Eğer projeniz karınca temelli ise, konsoldan böyle bir şey yapabilmelisiniz:

ant test

Bu işe yaramazsa, ancak yine de projeniz karınca tabanlıysa ant -p, projenin ana hedeflerini listelemek için koşabilirsiniz .


2
Q'nun karınca ile ilgisi yok
Accuya

3
Bu yüzden "projeniz karınca temelli ise" dedim. Ayrıca OP'nin karınca hakkında bilgi sahibi olamayabileceğini de unutmayın.
cherouvim

Bu dillema vardı, birim test dosyaları tutulma tarafından kaynak olarak işaretlenmiş klasörde değildi. Bu proje inşa etmek için karınca kullanıyor, bu JUnit testlerini yürütmenin doğru yolu buydu.
Andrzej Rehmann
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.