java.lang.IllegalStateException:JMockit未正确初始化;检查jmockit.jar是否在类路径中的junit.jar之前

时间:2013-08-27 15:10:30

标签: code-coverage junit4 jmockit

当我尝试运行Junit测试用例时,我遇到了异常。 如果我正在更改类路径条目顺序,它工作正常,但Jococo覆盖不起作用。它正在挂起。 可以随时帮助解决这个问题。

<classpathentry kind="lib" path="libt/junit-4.8.2.jar"/>
<classpathentry kind="lib" path="lib/jmockit.jar"/>
java.lang.IllegalStateException: JMockit wasn't properly initialized; check that jmockit.jar precedes junit.jar in the classpath (if using JUnit; if not, check the documentation)
    at com.amica.bc.testutil.BillingCenterTestUtil$1.<init>(BillingCenterTestUtil.java:18)
at com.amica.bc.testutil.BillingCenterTestUtil.setCurrentUserName(BillingCenterTestUtil.java:18)
    at amica.util.logging.TestAmicaGWLogger.setUp(TestAmicaGWLogger.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

4 个答案:

答案 0 :(得分:3)

症状: 使用Jmockit和junit运行maven到java项目时出错。

MESSAGE: JMockit未正确初始化;检查jmockit.jar是否在类路径中的junit.jar之前(如果使用JUnit;如果没有,请查看文档)

原因:

在POM.xml文件中配置错误。 Jmockit依赖是在junit之后。

解:

编辑POM.xml文件。 jmockit.jar应该在junit.jar之前,然后jmockit依赖应该在junit之前。

答案 1 :(得分:2)

我在运行独立应用程序时遇到了类似问题,该应用程序需要同时包含 junit-4.8.1.jar jmockit-0.999.4.jar 的jar。以下是我做的工作:

1。转到pom.xml。单击 depdendency hierarchy 选项,然后键入&#34; junit&#34;在搜索栏中。从这里你将了解你的&#34; junit&#34;来了。在这里,我发现&#34; nature-6.51&#34;在我的项目中,depdendency负责这一点(注意无论是什么)。

junit dependency

2。键入&#34; jmockit&#34;在搜索栏中记下此处显示的依赖关系(jmockit-0.999.4)

jmockit dependency

3。转到pom.xml并搜索&#34; nature&#34; (或负责junit的依赖)和&#34; jmockit&#34;我们分别在步骤#1和#2中记录了依赖性。您会看到 自然 依赖关系将列在 jmockit 依赖关系之上。

4. 现在只需复制 jmockit依赖并将其放在 nature-6.51 依赖项的上方(我做了bcz nature&#39) ; s jar在我的项目中携带junit)

这对我来说很成功。 :)

答案 2 :(得分:2)

官方指南告诉我们以下内容:

  

JMockit还需要-javaagent JVM初始化参数来   使用;使用Maven Surefire插件进行测试执行时,   指定如下:

<plugins>
   <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.21.0</version> <!-- or some other version -->
      <configuration>
         <argLine>
            -javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
         </argLine>
         <!-- ... -->
      </configuration>
   <plugin>
   <!-- ... -->
<plugins> 

更多详细信息http://png-pixel.com/here

答案 3 :(得分:0)

我的问题是在main源文件夹而不是test源文件夹中定义了测试。我们在pom中使用范围测试定义了jmockit和junit的依赖关系。因此,它们无法进行此测试。

在编辑和编译期间,IDE并没有那么严格,所以没有任何警告,但是测试因同样的奇怪错误而失败。