JMockit - 初始化问题

时间:2010-05-25 14:46:24

标签: java 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();
    }

}

有什么想法吗?

8 个答案:

答案 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/" 
        ]
    ]