2017-04-08 57 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