【问题标题】:JMockit javaagent isn't initializing JMockitJMockit javaagent 没有初始化 JMockit
【发布时间】:2013-12-19 02:06:33
【问题描述】:

我已经设置了 JMockit 以用于一些 JUnit 测试,也使用 Robolectric,但我遇到了错误。我主要使用 maven 来运行测试。

当我使用 mvn test 并按照指定的 here 配置 javaagent 运行测试时,我得到了通常的异常:

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

我已经使用mvn dependency:build-classpathmvn test --debug 验证了JMockit 在之前 JUnit 的类路径中。我还验证了 -javaagent 参数是使用 mvn test --debug 适当调用的。

库版本:

  • JDK 1.6
  • JMockit 1.5
  • JUnit 4.8.2
  • Robolectric 2.2 Robolectric 跑步者阻止我使用 JMockit 跑步者。
  • Maven 3.0.3
  • Surefire 2.14.1

测试类如下:

@RunWith(RobolectricTestRunner.class)
public class HelpFragTest {

    FragmentActivity activity;
    FragmentManager fragmentManager;
    @Mocked ActionBarManager actionBarManager;

    @Before
    public void setup() throws Exception {
        activity = Robolectric.buildActivity(FragmentActivity.class).create().resume().get();
        fragmentManager = activity.getSupportFragmentManager();
        MyApplication.instance().setActionBarManager(actionBarManager);
    }

    @Test
    public void testShow(){
        new NonStrictExpectations() {{
            Helper.staticMethod(anyString, anyString);
            actionBarManager.clear();
            actionBarManager.setTitle(anyString);
            actionBarManager.refresh();
        }};
        HelpFrag frag = HelpFrag.newInstance();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(frag, StringUtils.EMPTY);
        transaction.commit();

        assertTrue(frag.isVisible());

    }
}

我也尝试过不使用显式运行程序或 JavaAgent,在这种情况下,我会从同一代码中得到以下异常:

java.lang.IllegalStateException:记录期望的位置无效

【问题讨论】:

标签: java junit jmockit


【解决方案1】:

我遇到了同样的问题,问题似乎是 Robolectric 测试运行器干扰了 JMockit-JUnit 集成。见this

【讨论】:

  • 看来你和我遇到了很多相同的问题。如果你有机会,请加入我Android Unit Testing。如果我不在那里,请使用@C.Ross ping 我。
【解决方案2】:

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

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

原因:

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

解决方案:

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

(总是把 jmockit 放在 junit 之前)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    相关资源
    最近更新 更多