Подтвердить что ты не робот

JMockit - проблема инициализации

Когда я использую следующий тест, я получаю ПРЕДУПРЕЖДЕНИЕ:

ПРЕДУПРЕЖДЕНИЕ: JMockit был инициализирован по требованию, что может привести к сбою определенных тестов; пожалуйста, проверьте документацию, чтобы улучшить ее инициализацию.

Это моя тестовая реализация:

package test;

import static mockit.Mockit.*;
import junit.framework.TestCase;
import mockit.*;
import mockit.integration.junit4.*;


import org.junit.*;
import org.junit.runner.*;

import filip.ClassUnderTest;
import filip.LowerClass;

@RunWith(JMockit.class)
public class MockTest extends TestCase {

    @MockClass(realClass = LowerClass.class)
    public static class LowerClassMock {
        @Mock(invocations = 1)
        public String doWork() {
            return "Mockowanie dziala :D";
        }
    }

    @Before
    public void setUp() { setUpMocks(LowerClassMock.class); }

    @After
    public void tearDown() { tearDownMocks(); }

    @Test
    public void testJMockit() {
        ClassUnderTest classUnderTest = new ClassUnderTest();

        classUnderTest.print();
    }

}

Любые идеи?

4b9b3361

Ответ 1

Как я понимаю, это исключение thrown при попытке вызвать метод JMockit, а JMockit не был правильно инициализирован.

Убедитесь, что вы следуете инструкциям JMockit, особенно в пунктах 3 и 4. Если JMockit появляется после JUnit jar в пути к классам, это может вызвать проблемы.

Ответ 2

Принятый ответ немного устарел относительно ссылок, поэтому стоит упомянуть о различных решениях напрямую.

Чтобы устранить эту проблему, выполните одно из следующих действий:

1 - Спецификация javaagent

Добавьте это в среду выполнения JUnit (для вашей версии):

 -javaagent:path/to/your/jmockit/jmockit-0.998.jar 

2 - настройте плагин Surefire в Maven, чтобы избежать его

Добавьте следующую конфигурацию Maven (выберите свои собственные версии)

<!-- JMockit must be before JUnit in the classpath -->
<dependency>
  <groupId>mockit</groupId>
  <artifactId>jmockit</artifactId>
</dependency>
<!-- Standard unit testing -->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
</dependency>

Убедитесь, что ваш плагин Surefire настроен следующим образом (для ваших конкретных версий):

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.4.3</version>
   <configuration>
      <argLine>-javaagent:${settings.localRepository}/mockit/jmockit/0.998/jmockit-0.998.jar</argLine>
      <useSystemClassLoader>true</useSystemClassLoader>
    </configuration>
 </plugin>

3 - Используйте аннотацию JUnit @RunWith

Добавьте эту аннотацию JUnit runner для каждого тестового класса

@RunWith(JMockit.class)
public class ExampleTest {}

Ответ 3

В дополнение к решению Gary Rowe :

Более надежная (т.е. агностика пути версии и репозитория) интеграции JMockit в Surefire будет

<argLine>-javaagent:${org.jmockit:jmockit:jar}

Чтобы разрешить это разрешение, необходимо настроить конфигурацию maven-dependency-plugin (version >= 2.5.1!) следующим образом:

<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
    <execution>
        <id>getClasspathFilenames</id>
        <goals>
            <goal>properties</goal>
        </goals>
    </execution>
</executions>

Ответ 4

Я просто добавил:

@RunWith (JMockit.class)

Что разрешило проблему, согласно документации в принятом ответе.

Ответ 5

Он все еще не работает для меня в IntelliJ. Я могу запустить его в командной строке.