Невозможно запустить тесты JMockit после обновления до версии 1.43

У меня есть собственный проект, который раньше отлично работал с Java 8. Я использую самые простые среды тестирования - TestNG и JMockit.

Недавно я обновил свою версию Java до Java 9 и заметил, что тест JMockit завершился неудачно из-за проблемы с доступом к модулям Java. Google привел меня к этому принятому решению для переполнения стека модуль java.base делает не читать модуль java.desktop, рекомендующий обновить JMockit до 1.34 или более поздней версии. После этого я обновил его до последней на данный момент версии - 1.43.

После этого обновления я больше не могу запускать тесты, и все, что я получаю, - это исключение NullPointerException в выводе консоли. Мой тест для воспроизведения проблемы приведен ниже:

package com.my.org;

import mockit.FullVerifications;
import mockit.Injectable;
import mockit.Tested;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class JMockitIssueTest {
    private class Delegate {
       public void doSomething() {
            System.out.println("Doing something");
        }
    }
    private class ClassUnderTest {
        private final Delegate delegate;

        private ClassUnderTest(Delegate delegate) {
            this.delegate = delegate;
        }

        public void useDelegate() {
            delegate.doSomething();
        }
    }

    @BeforeMethod
    public void setUp() throws Exception {
    }

    @Injectable
    private Delegate delegate;
    @Tested
    private ClassUnderTest classUnderTest;

    @Test
    public void itShouldUseDelegate() {
        classUnderTest.useDelegate();

        new FullVerifications() {{
            delegate.doSomething();
        }};
    }
}

Первоначально метода setUp не было, но после добавления пустого я получил немного больше информации в выводе консоли, который я перечисляю ниже:

Test ignored.

        java.lang.NullPointerException
        at mockit.integration.testng.TestNGRunnerDecorator.beforeInvocation(TestNGRunnerDecorator.java:32)
        at org.testng.internal.invokers.InvokedMethodListenerInvoker$InvokeBeforeInvocationWithoutContextStrategy.callMethod(InvokedMethodListenerInvoker.java:84)
        at org.testng.internal.invokers.InvokedMethodListenerInvoker.invokeListener(InvokedMethodListenerInvoker.java:62)
        at org.testng.internal.Invoker.runInvokedMethodListeners(Invoker.java:493)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:533)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
        at org.testng.TestRunner.privateRun(TestRunner.java:648)
        at org.testng.TestRunner.run(TestRunner.java:505)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
        at org.testng.SuiteRunner.run(SuiteRunner.java:364)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
        at org.testng.TestNG.runSuites(TestNG.java:1049)
        at org.testng.TestNG.run(TestNG.java:1017)
        at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
        at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)

Я пробовал несколько перестановок, таких как использование экземпляра @Mocked Delegate и создание самого ClassUnderTest или даже откат к Java 8. Не повезло.

Я даже попытался перенести тест на jUnit (не совсем желательный вариант, поскольку существует более 1400 тестовых классов). На данный момент у меня заканчиваются идеи, но, с другой стороны, приведенный выше вариант использования настолько прост, что я действительно надеюсь, что делаю глупость, не зная о том, что изменилось в мире JMockit, поскольку я использовал версию 1.27 этого издевательства. фреймворк.

Заранее благодарим вас за ваши варианты.


person Julian    schedule 26.10.2018    source источник
comment
Думали ли вы заглянуть на сайт проекта JMockit?   -  person Rogério    schedule 26.10.2018
comment
Я только просмотрел изменения, сделанные с версии 1.27, которая у меня работала. Я использую JMockit в течение трех лет для своего собственного проекта и на работе. Я не вижу ничего необычного в том, что делаю, поэтому не уверен   -  person Julian    schedule 28.10.2018


Ответы (1)


Возможно, @ Rogério хочет обратиться к примечаниям к выпуску, в которых, начиная с версии 1.42, используется параметра JVM -javaagent.

Попробуйте, это также упоминается в разделе Текущие тесты

person Alfergon    schedule 30.10.2018