JMockit - проблема инициализации - PullRequest
29 голосов
/ 25 мая 2010

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

ВНИМАНИЕ: 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();
    }

}

Есть идеи?

Ответы [ 6 ]

38 голосов
/ 06 декабря 2010

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

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

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 на каждый тестовый класс

@RunWith(JMockit.class)
public class ExampleTest {}
17 голосов
/ 25 мая 2010

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

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

3 голосов
/ 11 марта 2015

В дополнение к решению Гэри Роу :

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

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

Чтобы это разрешение работало, подключаемый модуль maven-dependency-plugin (версия> = 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>

0 голосов
/ 01 августа 2018

Я настраиваю файл свойств в classpath для легкой настройки Junit 5:

Это ДОЛЖНО иметь имя junit-platform.properties

junit.jupiter.extensions.autodetection.enabled = true
junit.jupiter.testinstance.lifecycle.default = per_class

Убедитесь, что вы используете более новую версию Jmockit, которая имеет класс JmockitExtension. ПРИМЕЧАНИЕ: Jmockit версии 1.8 НЕ новее версии 1.41. Версия 1.8 должна была быть 1.08.

Maven Центральная ссылка: https://mvnrepository.com/artifact/org.jmockit/jmockit

0 голосов
/ 16 августа 2017

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

0 голосов
/ 07 мая 2017

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

@ RunWith (JMockit.class)

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

...