2016-05-17 62 views
0

我想在Windows上使用命令行啓動我的JUnit測試。 我已經看到它的線程在此頁: How to run JUnit test cases from the command line在Windows Shell中使用Junit或TestNG

這是命令行我用它來啓動它:

java -cp C:\Junit\junit-4.11.jar org.junit.runner.JUnitCore 
    'C:\Users\FORNAME NAME\workspace\Project\test\TheClassIWantToTest.class' 

,我有以下錯誤:

莫非找不到類:TheClassIWantToTest異常等

我敢肯定,我沒有找到因爲我使用了自動完成功能,所以寫入文件的方式出錯。當我在沒有JUnit的情況下啓動它時,我們會發現這個班級。 我已經試過,沒有在文件名末尾的.class。

當我嘗試通過命令行啓動TestNG時,我遇到了完全相同的錯誤。

任何人都有這個問題?

回答

0

這次我跟着Junit Getting Started鏈接,這個例子的作品。

下面是我在Windows中所做的步驟;

1:我創建的文件夾測試在我的桌面

2:內部測試,我創建了計算器(Calculator.java)文件

public class Calculator { 
    public int evaluate(String expression) { 
    int sum = 0; 
    for (String summand: expression.split("\\+")) 
     sum += Integer.valueOf(summand); 
    return sum; 
    } 
} 

3.內部測試 ,我創建了CalculatorTest(CalculatorTest.java)文件

import static org.junit.Assert.assertEquals; 
import org.junit.Test; 

public class CalculatorTest { 
    @Test 
    public void evaluatesExpression() { 
    Calculator calculator = new Calculator(); 
    int sum = calculator.evaluate("1+2+3"); 
    assertEquals(6, sum); 
    } 
} 

4:我從Maven Repository下載了Junit 12 jar(注意:這個例子不使用maven,我只使用maven倉庫來獲取jar文件)。

5:我下載了hamcrest-core 1。從3罐子Maven repository(注:本例中不使用Maven的,我只使用maven倉庫來獲取jar文件)

6:測試文件夾看起來像這樣 enter image description here

7:我運行結束了CMD,然後轉到測試文件夾的根目錄,然後執行此命令

javac -cp junit-4.12.jar;hamcrest-core-1.3.jar *.java 

注:*的.java編譯所有文件與Java擴展,在日區分CalculatorTest.java和Calculator.java

8:test文件夾看起來像現在這個樣子 enter image description here

9:我執行命令

java -cp junit-4.12.jar;hamcrest-core-1.3.jar;. org.junit.runner.JUnitCore CalculatorTest 

注:這句話一定要加上點(。)在類路徑,否則計算器文件是找不到它,你會得到

initializationError(org.junit.runner.JUnitCommandLineParseResult) 
java.lang.IllegalArgumentException: Could not find class 

最後,我得到單元測試ru nning通過命令行如何可以看到下面

enter image description here

此時例子並不inlcude的關鍵字,它具有Windows上的物理文件夾添加到運行測試,讓我們解釋這個情況

1:讓我們包 「stackoverflow.junit.test」 添加到文件Calculator.java和CalculatorTest.java

package stackoverflow.junit.test; 

public class Calculator { 
    public int evaluate(String expression) { 
    int sum = 0; 
    for (String summand: expression.split("\\+")) 
     sum += Integer.valueOf(summand); 
    return sum; 
    } 
} 

package stackoverflow.junit.test; 

import static org.junit.Assert.assertEquals; 
import org.junit.Test; 

    public class CalculatorTest { 
     @Test 
     public void evaluatesExpression() { 
     Calculator calculator = new Calculator(); 
     int sum = calculator.evaluate("1+2+3"); 
     assertEquals(6, sum); 
     } 
    } 

2)現在可以在javac -cp junit-4.12.jar;hamcrest-core-1.3.jar *.java之前用相同的指令顯示編譯代碼。但是,如果我想運行測試我會得到java.lang.NotClassDefFoundError

enter image description here

爲了解決這個問題的文件夾必須在物理上創建並添加了Calculator.java和CalculatorTest.java

enter image description here

  • 用我的文件夾的右側結構我編譯和運行測試,但具有帳戶,此命令是從測試執行文件夾根目錄。更重要的是,包的名稱必須添加。

    的javac -cp的junit-4.12.jar; hamcrest核-1.3.jar計算器/ junit的/測試/ *的java

    的java -cp的junit-4.12.jar; hamcrest核-1.3.jar; 。 org.junit.runner.JUnitCore stackoverflow.junit.test。CalculatorTest

  • enter image description here

    建議:這一切會少乏味,如果你使用Maven或搖籃。

    建議:檢查你的proyect的結構以及你的CLASSPATH。

    +0

    這條消息真的幫了我很大的忙,似乎它是需要的最先進的核心。非常感謝。 –

    0

    如何:

    java -cp .;C:\Junit\junit-4.11.jar org.junit.runner.JUnitCore 
        'C:\Users\FORNAME NAME\workspace\Project\test\TheClassIWantToTest.java' 
    

    或者嘗試創建一個測試運行類

    查看此link爲例如如何做到這一點。

    +0

    對於想知道兩個java命令有什麼不同的人,一個有'-cp。; C:\ bla',另一個只是'-cp C:\ bla'(缺少當前工作目錄, .') – stuXnet

    +0

    @stuXnet點('.')表示現有的類路徑,或稱之爲當前的dicrectory。這意味着,如果你在路徑'C:\ Users \ user \ workspace'並用點(。)執行該命令,則java或javac命令將查找資源(不管它是什麼,「.class」,「 .jar「或」.java「)。 –

    +0

    我有同樣的結果,我會嘗試Test Runner類,但有人可以告訴我爲什麼它不工作? –