Junit:如何使用命令行从项目运行测试

时间:2017-04-08 18:59:42

标签: java junit junit4

这是项目中类的构建结构

(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 个答案:

答案 0 :(得分:1)

你的命名真的令人困惑。类名在java中为UpperCase;你不要在其中使用_。请注意:您在代码中谈到abc_test;但是例外情况test_harvester - 一个名字在你输入的其他任何地方都没有显示!

除此之外,我猜测这里的答案是:运行JUnit时,类路径中需要三个部分:

  • JUnit本身
  • 您的制作班级
  • 您的考试类

我猜:你的测试类在你为JUnit运行提供给java的JAR中。可能是因为gradle默认情况下不会将测试类添加到您的JAR中(这是有道理的:您为什么要将单元测试类发送给您的客户?!)