类ParserTest
位于包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运行器并通过测试类作为参数:
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
要求参数使用.
作为目录和类之间的分隔符,而不是使用/
。
calltrace看起来像这样,结束于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);
java.lang.Class.forName(String className)
的JavaDoc说:
参数:className - 所需类的完全限定名
在Java中,完全限定名是用.
而不是/
来写的。