JMockit - 初始化问题

2022-09-01 09:27:29

当我使用以下测试时,我得到一个警告:

警告: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

关于链接,接受的答案有点过时了,所以值得直接提到的是各种解决方案。

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

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 运行器注释

@RunWith(JMockit.class)
public class ExampleTest {}

答案 2

据我所知,当尝试调用JMockit方法时,会引发此异常,而JMockit尚未正确初始化。

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


推荐