【发布时间】: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-classpath 和mvn 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:记录期望的位置无效
【问题讨论】: