JMockit没有正确初始化。

5
我正在使用junit 4.12jmockit 1.19spring-test 4.1.1.RELEASE来测试我的Spring MVC Java项目。这些依赖项在我的pom.xml文件中的顺序如下:
  • jmockit
  • junit
  • spring-test
服务层的测试用例正常工作。我仅使用spring-test来测试控制器。当测试控制器时,我遇到了以下错误:

java.lang.IllegalStateException: JMockit wasn't properly initialized; please ensure that jmockit precedes junit in the runtime classpath, or use @RunWith(JMockit.class)

对于服务层,我通过在测试类上使用@RunWith(JMockit.class)解决了此错误。
但是对于控制器,我需要使用@RunWith(SpringJUnit4ClassRunner.class)进行注释。
如何解决此错误?
注意:我在pom.xml中将jmockit放在junit之前。

如果您可以升级到Spring Framework 4.2.1,现在已经支持JUnit_Rules_。因此,您不需要SpringJUnit4ClassRunner:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#testcontext-junit4-rules - Sam Brannen
1
我认为您需要展示一个示例测试类和一个重现问题的示例pom.xml文件。我已经测试了这些工具(jmockit、junit和spring-test)的组合,但是没有看到任何初始化失败的情况。 - Rogério
3个回答

0

使用JMockit版本1.41时,我的测试可以正常工作,但在更新的版本中出现了相同的错误。 Maven仓库

错误: java.lang.IllegalStateException: JMockit未正确初始化;


0

尝试更新您的Maven项目。在Eclipse中右键单击您的项目,然后转到Maven > 更新项目...


0

我并不完全确定这会解决你的问题,因为我刚开始使用jmockit,也遇到了类似的问题。

你尝试过使用-javaagent:吗?在Eclipse中应用到所有JUnit测试的最简单方法是进入JRE设置,并添加为VM参数(首选项->JRE->编辑->VM默认值)。

此外,我在市场中找到了一个Eclipse JMockit插件,它会自动将javaagent附加到任何JUnit测试中,以避免JRE配置。

最后,在你的POM中,你可以尝试以下方法(虽然我还没有自己测试过):

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-javaagent:${org.jmockit:jmockit:jar}</argLine>
            </configuration>
        </plugin>

然而,请记住这仅适用于通过Maven启动的测试,而不是通过IDE。我还没有找到一种方法让m2e插件理解需要将javaagent附加到junit测试的要求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接