NoSuchMethodError при запуске JMockit

Я пытаюсь использовать JMockit, чтобы я мог смоделировать окончательный метод в стороннем файле jar.

Когда я попробовал очень простой тест, я получил com.sun.tools.attach.AttachNotSupportedException и после некоторого поиска нашел здесь, что это вызвано тем, что IBM JDK6.0 не поддерживает функцию прикрепления, а затем было высказано предположение, что исправление должно заключаться в том, чтобы поместить это в мои аргументы виртуальной машины:

-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 и JRE, который поставляется с RAD8.5 для разработки Websphere 8.5, который является 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);
    }

}

Я использую версию 1.2 файла jmockit.jar, которая является последней версией на момент написания этой статьи.

Кто-нибудь знает, можно ли вообще использовать JMockit на IBM версии JRE или это просто невозможно?

Кто-нибудь еще сталкивался с этой ошибкой раньше и знает, как ее исправить?


person nzcoder    schedule 19.06.2013    source источник
comment
Эта проблема связана только с JUnit, а не с JRE. Какая версия используется? Должен быть JUnit 4.5 или новее. Кроме того, лучше избегать junit.jar, встроенного в Eclipse (если это так), поскольку он может быть не таким полным, как официальный junit.jar.   -  person Rogério    schedule 20.06.2013
comment
Большое спасибо, это исправлено ... Я обновил его до JUnit 4.11, как и раньше на JUnit 4.1. Теперь работает как шарм.   -  person nzcoder    schedule 21.06.2013