我已经为一些使用Robolectric的JUnit测试设置了JMockit,但是我遇到了错误。我主要使用maven来运行测试。
当我使用mvn test运行测试,并按照这里指定的配置javaagent时,我会得到通常的异常:
库版本:
当我使用mvn test运行测试,并按照这里指定的配置javaagent时,我会得到通常的异常:
我已经验证了JMockit在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)
mvn dependency:build-classpath
和mvn test --debug
中在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());
}
}
我也尝试过不使用显式的运行程序或Java代理,此时从相同的代码中会得到以下异常:
java.lang.IllegalStateException: 记录期望的位置无效