簡體   English   中英

使用命令行從 JUnit 類運行單個測試

[英]Run single test from a JUnit class using command-line

我試圖找到一種方法,允許我僅使用命令行和 java 從 JUnit 類運行單個測試。

我可以使用以下命令從類中運行整套測試:

java -cp .... org.junit.runner.JUnitCore org.package.classname

我真正想做的是這樣的:

java -cp .... org.junit.runner.JUnitCore org.package.classname.method

或者:

java -cp .... org.junit.runner.JUnitCore org.package.classname#method

我注意到可能有辦法使用 JUnit 注釋來做到這一點,但我不希望手動修改我的測試類的源(試圖自動化)。 我也確實看到 Maven 可能有辦法做到這一點,但如果可能的話,我想避免依賴 Maven。

所以我想知道是否有任何方法可以做到這一點?


我正在尋找的關鍵點:

  • 能夠從 JUnit 測試類運行單個測試
  • 命令行(使用 JUnit)
  • 避免修改測試源
  • 避免使用額外的工具

您可以相當輕松地制作自定義的准系統 JUnit 運行程序。 這是一個將以com.package.TestClass#methodName形式運行單個測試方法的方法:

import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
import org.junit.runner.Result;

public class SingleJUnitTestRunner {
    public static void main(String... args) throws ClassNotFoundException {
        String[] classAndMethod = args[0].split("#");
        Request request = Request.method(Class.forName(classAndMethod[0]),
                classAndMethod[1]);

        Result result = new JUnitCore().run(request);
        System.exit(result.wasSuccessful() ? 0 : 1);
    }
}

你可以像這樣調用它:

> java -cp path/to/testclasses:path/to/junit-4.8.2.jar SingleJUnitTestRunner 
    com.mycompany.product.MyTest#testB

在快速查看 JUnit 源代碼后,我得出與您相同的結論,即 JUnit 本身不支持此功能。 這對我來說從來都不是問題,因為 IDE 都有自定義的 JUnit 集成,允許您在光標下運行測試方法以及其他操作。 我從未直接從命令行運行 JUnit 測試; 我總是讓 IDE 或構建工具(Ant、Maven)來處理它。 特別是因為默認的 CLI 入口點 (JUnitCore) 除了測試失敗時的非零退出代碼之外不會產生任何結果輸出。

注意:對於 JUnit 版本 >= 4.9,您需要在類路徑中使用hamcrest

我使用 Maven 構建我的項目,並使用 SureFire maven 插件運行 junit 測試。 如果您有此設置,那么您可以執行以下操作:

mvn -Dtest=GreatTestClass#testMethod test

在這個例子中,我們只是在類“GreatTestClass”中運行一個名為“testMethod”的測試方法。

有關更多詳細信息,請查看http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html

以下命令工作正常。

mvn -Dtest=SqsConsumerTest -DfailIfNoTests=false test

我們使用了 IntelliJ,也花了很多時間試圖弄明白。

基本上,它包括兩個步驟:

步驟 1:編譯測試類

% javac -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" SetTest.java

步驟 2:運行測試

% java -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" org.junit.runner.JUnitCore SetTest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM