如果 类 在包中,如何从命令行 运行 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 中,完全限定名称的写法是 .
而不是 /
。
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 中,完全限定名称的写法是 .
而不是 /
。