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();
}
}
Любые идеи?
Ответы
Ответ 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. Я могу запустить его в командной строке.