JMockit javaagent没有初始化JMockit

时间:2013-12-19 02:06:33

标签: java junit jmockit

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

当我使用 mvn test 运行测试并且javaagent配置为指定here时,我得到通常的例外:

  

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:记录期望的无效地点

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

原因:

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

解:

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

(总是在junit之前放jmockit)