2015-09-28 340 views
2

我正在使用junit 4.12jmockit 1.19 & spring-test 4.1.1.RELEASE来测试我的Spring MVC Java项目。在我pom.xml这些依赖的JMockit未正确初始化

订单:

  • jmockit
  • junit
  • 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)进行注释。

如何解决此错误?

注:我把jmockitjunitpom.xml

+0

如果您可以升级到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 –

+0

我相信你将需要显示一个示例测试类和一个重现问题的示例pom.xml文件。我已经测试了这个工具组合(jmockit,junit和spring-test),但没有发现初始化失败。 –

回答

1

我不能完全肯定这将解决你的问题,因为我使用jmockit自己,遇到类似的作风问题才刚刚开始。

您是否尝试过使用-javaagent:?适用于所有JUnit测试(Eclipse)的最简单方法是转到JRE设置并添加为虚拟机参数(首选项 - > JRE->编辑 - >虚拟机默认值)。

此外,我通过市场找到了一个Eclipse JMockit插件,该插件将自动将javaagent附加到任何junit测试以避免JRE配置。

最后,在你的POM,你可以尝试(虽然我没有测试它自己还):

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

但是,请记住,这只会工作的行家启动测试,而不是通过IDE。我还没有找到一种方法让m2e插件了解将javaagent附加到junit测试的要求。