2
java -classpath requiredclasspath org.junit.runner.JUnitCore some.package.HelloWorldTest

结果是:

JUnit version 4.8.1
.

Time: 0.005

OK (1 test)

但:

java -javaagent:agent.jar -classpath requiredclasspath org.junit.runner.JUnitCore some.package.HelloWorldTest    

结果是:

JUnit version 4.8.1
Could not find class: some.package.HelloWorldTest

Time: 0.001

OK (0 tests)

核心问题似乎是:

Class.forName("some.package.HelloWorldTest") (runMain method, line 89, JunitCore)

抛出 ClassNotFoundException 如下:

java.lang.ClassNotFoundException: some/package/HelloWorldTest
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:89)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:53)
at org.junit.runner.JUnitCore.main(JUnitCore.java:45)

我不知道为什么它找不到课程。请注意,检测代理已成功加载并且不会引发任何异常。

4

2 回答 2

2

原来我在为 javaagent 指定的引导类路径中拥有 junit jar 以及通过 -classpath 指定的用户类路径,即 agent.jar 的清单具有以下条目:

Boot-Class-Path: ...junit.jar...

并且 java 命令的 -classpath 参数具有以下内容:

-classpath ...junit.jar...

我能够通过从清单引导类路径条目中删除 junit.jar 来解决问题。以下是对该问题的简短说明:

由于 junit.jar 包含在引导类路径中,因此首先使用引导类加载器加载 org.junit.runner.JUnitCore。因此,当在 JunitCore 中调用 Class.forName 时,它​​尝试使用引导类加载器查找类,但由于它不是引导类路径的一部分,所以找不到该类。

于 2010-12-22T20:38:06.647 回答
0
some.package.HelloWorldTest 

不在 CLASSPATH 中。添加它,一切都会好起来的。

于 2010-12-22T17:29:21.800 回答