JMockit - 初始化问题

Fil*_*lip 30 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();
    }

}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Gar*_*owe 40

对于链接,已接受的答案已经过时了,因此值得直接提及各种解决方案.

要解决此问题,请执行以下操作之一:

1 - 指定一个javaagent

将此添加到您的JUnit执行环境(适用于您的版本):

 -javaagent:path/to/your/jmockit/jmockit-0.998.jar 
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

确保您的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>
Run Code Online (Sandbox Code Playgroud)

3 - 使用JUnit @RunWith注释

在每个测试类上添加此JUnit runner注释

@RunWith(JMockit.class)
public class ExampleTest {}
Run Code Online (Sandbox Code Playgroud)


Eti*_*veu 17

据我了解,当一个人试图调用JMockit方法时,抛出此异常,而JMockit尚未正确初始化.

确保遵循JMockit安装说明,尤其是第3点和第4点.如果JMockit jar位于类路径中的JUnit jar 之后,则可能会导致问题.

  • 此接受的答案中的JMockit安装说明链接已损坏! (2认同)