这是情景:
我有两个从SingleLaunchActivityTestCase扩展的类。
public class ABCTest extends SingleLaunchActivityTestCase<ABCActivity>
和
public class XYZTest extends SingleLaunchActivityTestCase<XYZActivity>
这些是它们各自的构造函数和setUp方法:
public ABCTest() {
super("com.android", ABCActivity.class);
}
@Override
protected void setUp() throws Exception
{
super.setUp();
mActivity = this.getActivity();
}
和
public ABCTest() {
super("com.android", XYZActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mActivity = this.getActivity();
}
现在使用te android testRunner运行ABCTest中的测试用例但是对于XYZTest,我得到以下异常:
java.lang. java.lang.ClassCastException: com.android.ABCActivity
at com.instrument.XYZTest.setUp(XYZTest.java:45)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
但是在运行这些测试时,分别是ABC测试和XYZ测试,它可以正常工作。
问题似乎与this.getActivity()
方法中的行setUp()
有关。
ABC测试是通过setUp()
XYZ测试返回com.android.ABCActivity
this.getActivity()
而不是com.android.XYZActivity
答案 0 :(得分:0)
我也遇到了将上次测试中的Activity作为当前Activity类的问题。
我认为这是SingleLaunchActivityTestCase的一个问题。如果您在测试中使用它,我认为您的测试套件应该只使用一个Activity运行。如果您正在测试多个活动,我建议使用ActivityInstrumentationTestCase2。
如果您希望继续使用SingleLaunchActivityTestCase并查看是否有帮助,您可以尝试在拆解方法中完成Activity并将this.activity设置为null:
public void tearDown() {
super.tearDown();
this.getActivity().finish();
}