当我使用以下测试时,我收到警告:
警告: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();
}
}
有什么想法吗?
答案 0 :(得分:38)
对于链接,已接受的答案已经过时了,因此值得直接提及各种解决方案。
要解决此问题,请执行以下操作之一:
1 - 指定一个javaagent
将此添加到您的JUnit执行环境(适用于您的版本):
-javaagent:path/to/your/jmockit/jmockit-0.998.jar
2 - 在Maven中配置Surefire插件以避免它
将以下内容添加到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 {}
答案 1 :(得分:17)
据我了解,当一个人试图调用JMockit方法时,这个异常是thrown,而JMockit没有被正确初始化。
请确保遵循JMockit installation instructions,特别是第3点和第4点。如果JMockit jar在类路径中的之后,它可能会导致问题。
答案 2 :(得分:3)
除了Gary Rowe的solution:
将JMockit集成到Surefire中的更强大(即版本和存储库路径不可知)
<argLine>-javaagent:${org.jmockit:jmockit:jar}
要使此解析工作,maven-dependency-plugin(版本&gt; = 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>
答案 3 :(得分:0)
我简单地补充道:
@RunWith(JMockit.class)
根据接受的答案中的文档解决了这个问题。
答案 4 :(得分:0)
在IntelliJ中它仍然没有运行。我能够运行命令行。
答案 5 :(得分:0)
我在类路径中设置了一个属性文件,以方便配置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 Central参考: https://mvnrepository.com/artifact/org.jmockit/jmockit
答案 6 :(得分:0)
我在Maven中运行测试没有困难,但是在Eclipse中运行它们时遇到了同样的错误。
JMockit Eclipse插件使我可以在Eclipse中运行所有测试,而无需任何额外的配置。
https://marketplace.eclipse.org/content/jmockit-eclipse
此插件的一大特色是
自动将JMockit jar作为-javaagent参数添加到JUnit 启动。
答案 7 :(得分:0)
对于 VSCode JMockito 错误 -
您必须制作一个包含 java.test.config 的 settings.json 文件。
在该文件中添加:
"java.test.config": [
{
"name": "myConfiguration",
"workingDirectory": "${workspaceFolder}",
"vmargs": [
"-Xmx512M", //this was here by default
"-javaagent:/path/to/jmockito/"
]
]