如果 类 在包中,如何从命令行 运行 JUnit 测试?

How to run JUnit tests from the command line if classes are in packages?

classParserTest在包myproject.tests中,存放在这个目录结构中:

.
└── myproject
    └── tests
        └── ParserTest.class

为当前 shell 会话设置 CLASSPATH(没有 -cp 选项,以保持 java 调用干净):

export CLASSPATH=.:/usr/local/lib/java/junit-4.12.jar:/usr/local/lib/java/hamcrest-core-1.3.jar

调用 JUnit 运行程序并通过测试 class 作为参数:

java org.junit.runner.JUnitCore myproject/tests/ParserTest

抛出此错误:

...
1) initializationError(org.junit.runner.JUnitCommandLineParseResult)
java.lang.IllegalArgumentException: Could not find class [myproject/tests/ParserTest]
...

org.junit.runner.JUnitCore 要求参数使用 . 作为目录和 类 之间的分隔符,而不是 /.

调用跟踪看起来像那样并以 java.lang.Class.forName(classname):

结尾
JUnitCore.main(args)
└── JUnitCore.runMain(args)
    └── JUnitCommandLineParseResult.parse(args)
        └── new JUnitCommandLineParseResult().parseArgs(args);
            └── JUnitCommandLineParseResult.parseParameters(...);
                └── ...
                    └── org.junit.internal.Classes.getClass(arg);
                        └── java.lang.Class.forName(className);

Javajava.lang.Class.forName(String className) 的文档说:

Parameters: className - the fully qualified name of the desired class.

而在 Java 中,完全限定名称的写法是 . 而不是 /