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

Junit: How to run tests from project using command line

这是项目中类的构建结构

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

我使用 gradlejunit 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 命令行命令中缺少什么?

你的命名真让人费解。 Class 名称在 java 中变为大写;你不要在其中使用 _ 。并注意:您在代码中谈论 abc_test ;但异常显示 test_harvester - 一个在您输入的其他任何地方都没有显示的名称!

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

  • JUnit 本身
  • 你的作品类
  • 你的测试类

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