2017-04-08 58 views
1

這是類的Junit的:如何使用命令行

(root project) 
    |__ build 
      |__ classes 
        |__ main/org/loklak/harvester 
               |__ abc.class 
        |__ test/org/loklak/harvester 
               |__ abc_test.class 
               |__ def_test.class 

我建立gradle這個JUnit的4.12工程項目的生成結構,並建立適當的 運行從項目的測試我已經檢查了abc_test.class存在於上述位置,
但是當運行 - >

java -Xmx1024m -classpath build/libs/loklak_server-all.jar org.junit.runner.JUnitCore org.loklak.harvester.abc_test 

我克等錯誤 - >

JUnit version 4.12 
.E 
Time: 0.004 
There was 1 failure: 
1) initializationError(org.junit.runner.JUnitCommandLineParseResult) 
java.lang.IllegalArgumentException: Could not find class [org.loklak.harvester.abc_test] 
    at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:102) 
    at org.junit.runner.JUnitCommandLineParseResult.parseArgs(JUnitCommandLineParseResult.java:50) 
    at org.junit.runner.JUnitCommandLineParseResult.parse(JUnitCommandLineParseResult.java:44) 
    at org.junit.runner.JUnitCore.runMain(JUnitCore.java:72) 
    at org.junit.runner.JUnitCore.main(JUnitCore.java:36) 
Caused by: java.lang.ClassNotFoundException: org.loklak.harvester.abc_test 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at org.junit.internal.Classes.getClass(Classes.java:16) 
    at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:100) 
    ... 4 more 

FAILURES!!! 
Tests run: 1, Failures: 1 

,其中作爲該命令工作正常 - >

java -Xmx1024m -classpath build/libs/loklak_server-all.jar org.loklak.harvester.abc 

abc_test.java

package org.loklak.harvester; 

import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 
import org.loklak.harvester.abc; 

public class abc_test { 
    public static void main(String[] args) { 
     Result result = JUnitCore.runClasses(def_test.class); 

     for (Failure failure : result.getFailures()) { 
      System.out.println(failure.toString()); 
     } 

     System.out.println(result.wasSuccessful()); 
    } 
} 

我無法找出錯誤,我在java命令行命令缺少?

回答

1

你的命名很混亂。類名在java中是UpperCase;你不要在他們內部使用_。注意:你在代碼中談論abc_test;但例外說test_harvester - 在您的輸入中不顯示任何其他名稱!

除此之外,我這裏的答案是:

  • 的JUnit本身
  • 您的生產類
  • 你的測試類
  • :運行JUnit當你需要 3個部分在classpath

我在猜測:您的測試的類是而不是,在那個JAR中,您爲JUnit運行Java。可能是因爲gradle默認不會將測試類添加到JAR中(這很有意義:您爲什麼要將單元測試課程發送給您的客戶?)

+0

對不起,對於名稱混淆,我已更正它們。 –

+0

那麼,我必須在類路徑中的/ build/classes中添加測試目錄嗎? –

+0

您必須確保在觸發JUnit運行時從測試類編譯的類文件位於類路徑中。如何讓他們在那裏,我不知道(在某種意義上:我不知道如何以「gradle」的方式來做到這一點)。當然,你可以退後一步,手動完成所有工作,然後只包括相應的目錄 - 只是爲了看看我對你的問題的假設是否正確。 – GhostCat