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(); } }
有任何想法吗?
据我了解,当一个人试图调用JMockit方法时, 抛出此exception,而JMockit尚未正确初始化。
确保遵循JMockit安装说明 ,尤其是第3点和第4点。如果JMockit jar位于类路径中的JUnit jar 之后 ,则可能会导致问题。
对于链接,已接受的答案已经过时了,因此值得直接提及各种解决方案。
要解决此问题,请执行以下操作之一:
1 – 指定一个javaagent
将此添加到您的JUnit执行环境(适用于您的版本):
-javaagent:path/to/your/jmockit/jmockit-0.998.jar
2 – 在Maven中配置Surefire插件以避免它
将以下内容添加到Maven配置中(选择您自己的版本)
mockit jmockit junit junit
确保您的Surefire插件配置如下(对于您的特定版本):
org.apache.maven.plugins maven-surefire-plugin 2.4.3 -javaagent:${settings.localRepository}/mockit/jmockit/0.998/jmockit-0.998.jar true
3 – 使用JUnit @RunWith注释
在每个测试类上添加此JUnit runner注释
@RunWith(JMockit.class) public class ExampleTest {}
除了Gary Rowe的解决方案 :
将JMockit集成到Surefire中的更强大(即版本和存储库路径不可知)将是
-javaagent:${org.jmockit:jmockit:jar}
要使此解析工作,maven-dependency-plugin(版本> = 2.5.1!)需要像这样配置:
maven-dependency-plugin 2.5.1 getClasspathFilenames properties
我只是补充说:
@RunWith(JMockit.class)
根据接受的答案中的文档,解决了该问题。
它在IntelliJ中仍然不适合我。 我能够运行命令行。
我在类路径中设置了一个属性文件,以便于配置Junit 5:
它必须命名为junit-platform.properties
junit.jupiter.extensions.autodetection.enabled = true junit.jupiter.testinstance.lifecycle.default = per_class
确保您使用的是具有JmockitExtension类的更新版本的Jmockit。 注意:Jmockit 1.8版本不比版本1.41新。 1.8版应该是1.08。
Maven Central参考: https : //mvnrepository.com/artifact/org.jmockit/jmockit