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



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中,完全限定名是用.而不是/来写的。

相关内容

  • 没有找到相关文章

最新更新