我正在尝试使用JMockit
,以便可以在 3rd 方 jar 文件中模拟出最终方法。
当我尝试一个非常简单的测试时,我得到了com.sun.tools.attach.AttachNotSupportedException
,经过一番搜索后,我发现这是由于IBM JDK6.0
不支持 Attach 功能引起的,然后建议解决方法是将其放入我的 VM args 中:
-javaagent:C:/jars/jmockit.jar
当我这样做并重新运行时,我得到以下异常。
java.lang.NoSuchMethodError: org/junit/runner/Description.getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
at mockit.integration.junit4.internal.RunNotifierDecorator.fireTestRunStarted(RunNotifierDecorator.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:613)
at mockit.internal.util.MethodReflection.invokeWithCheckedThrows(MethodReflection.java:95)
at mockit.internal.annotations.MockMethodBridge.callMock(MockMethodBridge.java:76)
at mockit.internal.annotations.MockMethodBridge.invoke(MockMethodBridge.java:41)
at org.junit.runner.notification.RunNotifier.fireTestRunStarted(RunNotifier.java)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:48)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
我正在使用 JUnit4,以及用于 Websphere 8.5 开发的 RAD8.5 附带的 JRE,即 IBM JRE6.0。以下是确切的 JVM 详细信息:
C:\IBM\WebSphere\AppServer\java\jre\bin>.\java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build pwa6460_26sr3-20120810_01(SR3))
IBM J9 VM (build 2.6, JRE 1.6.0 Windows 7 amd64-64 20120809_118944 (JIT enabled, AOT enabled)
J9VM - R26_Java626_SR3_20120809_1152_B118944
JIT - r11.b01_20120808_24925
GC - R26_Java626_SR3_20120809_1152_B118944
J9CL - 20120809_118944)
JCL - 20120713_01
我的代码是一个简单的空测试,到目前为止没有使用JMockit
. 这里是:
public class TestJMockit {
@Test
public void testJMockit() {
boolean isTrue = true;
assertTrue(isTrue);
}
}
我正在使用该jmockit.jar
文件的 1.2 版本,这是撰写本文时的最新版本。
有谁知道是否可以在aJMockit
的IBM
版本上使用JRE
或者根本不可能?
有没有其他人遇到过这个错误并且知道修复它?