如果测试类中存在多个测试方法,Android JUnit测试方法将挂起

如果测试类中存在多个测试方法,Android JUnit测试方法将挂起,android,unit-testing,junit,Android,Unit Testing,Junit,我正在为一个应用程序编写一个AndroidJUnit测试。我扩展了ActivityInstrumentationTestCase2,并且在我的测试类中有多个测试方法。我不使用Robotium——只是一个简单的Android JUnit测试。 当我一次性运行测试方法时,第一个通过,下一个挂起。如果我把它们分开运行,所有的都通过了。在我的测试中发生的事情是,在每个测试方法中,我使用getActivity()启动测试下的活动,然后做一些事情,启动另一个活动,测试下的活动将自动销毁。我也尝试销毁新启动的

我正在为一个应用程序编写一个Android
JUnit
测试。我扩展了ActivityInstrumentationTestCase2,并且在我的测试类中有多个测试方法。我不使用Robotium——只是一个简单的Android JUnit测试。 当我一次性运行测试方法时,第一个通过,下一个挂起。如果我把它们分开运行,所有的都通过了。在我的测试中发生的事情是,在每个测试方法中,我使用
getActivity()
启动测试下的
活动,然后做一些事情,启动另一个活动,测试下的活动将自动销毁。我也尝试销毁新启动的活动(它被监视器捕获),但它在我的设备上保持打开状态,下一个测试方法挂起
getActivity()
。您能告诉我如何让下一个测试方法正确启动测试下的
活动吗?我不能给出实际的代码,但下面是我正在做的一些示例:

public class Test extends ActivityInstrumentationTestCase2< Activity_Under_Test> {

    ... // local vars

    public Test() {
        super(Activity_Under_Test.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();

        instrumentation = getInstrumentation();
        context = instrumentation.getTargetContext();
        prefs = context.getSharedPreferences(...);
    }

    @Override
    protected void tearDown() throws Exception {
        if (activity != null) {
            activity.finish();
        }

        super.tearDown();
    }

    public void test1() {
        ... // change shared preferences so that Activity_ABC is started automatically from Activity_Under_Test

        monitor1 = instrumentation.addMonitor(Activity_ABC.class.getName(), null, false);

        activity = getActivity();

        // Activity_Under_Test starts automatically Activity_ABC and destroys itself
        activityABC = (Activity_ABC) mInstrumentation.waitForMonitorWithTimeout(monitor1, 5);
        assertNotNull(activityABC);

        instrumentation.runOnMainSync(new Runnable() {

            @Override
            public void run() {
                instrumentation.callActivityOnDestroy(activityABC);
            }
        });

        assertTrue(activityABC.isDestroyed());
        instrumentation.removeMonitor(monitor1);
    }

    public void test2() {
        ... // change shared preferences so that Activity_DEF is started automatically from Activity_Under_Test

        monitor2 = instrumentation.addMonitor(Activity_DEF.class.getName(), null, false);

        activity = getActivity();

        // Activity_Under_Test starts automatically Activity_DEF and destroys itself
        activityDEF = (Activity_DEF) mInstrumentation.waitForMonitorWithTimeout(monitor2, 5);
        assertNotNull(activityDEF);

        instrumentation.runOnMainSync(new Runnable() {

            @Override
            public void run() {
                instrumentation.callActivityOnDestroy(activityDEF);
            }
        });

        assertTrue(activityDEF.isDestroyed());
        instrumentation.removeMonitor(monitor2);
    }
}
公共类测试扩展了ActivityInstrumentationTestCase2{
…//局部变量
公开考试(){
super(测试类下的活动);
}
@凌驾
受保护的void setUp()引发异常{
super.setUp();
instrumentation=getInstrumentation();
context=instrumentation.getTargetContext();
prefs=context.getSharedReferences(…);
}
@凌驾
受保护的void tearDown()引发异常{
if(活动!=null){
activity.finish();
}
super.tearDown();
}
公共void test1(){
…//更改共享首选项,以便“活动”\u测试下的“活动”\u自动启动“活动”\u ABC
monitor1=instrumentation.addMonitor(Activity_ABC.class.getName(),null,false);
activity=getActivity();
//“活动”测试下的“活动”自动启动“活动”ABC并自行销毁
activityABC=(Activity_ABC)mintrumentation.waitformonitor with timeout(监视器1,5);
assertNotNull(活动ABC);
instrumentation.runOnMainSync(新的Runnable(){
@凌驾
公开募捐{
仪器仪表.callActivityOnDestroy(activityABC);
}
});
assertTrue(activityABC.isDestroyed());
仪器。移除监视器(监视器1);
}
公共无效测试2(){
…//更改共享首选项,以便“活动”定义从“活动”测试下的“活动”自动启动
monitor2=instrumentation.addMonitor(Activity_DEF.class.getName(),null,false);
activity=getActivity();
//_测试下的活动_自动启动活动_DEF并自行销毁
activityDEF=(Activity_DEF)mInstrumentation.waitformonitor with timeout(监视器2,5);
assertNotNull(activityDEF);
instrumentation.runOnMainSync(新的Runnable(){
@凌驾
公开募捐{
仪器.调用ActivityOnDestroy(activityDEF);
}
});
assertTrue(activityDEF.isDestroyed());
仪器。移除监视器(监视器2);
}
}
如果你需要更多的信息,请告诉我我要告诉更多的


提前谢谢你

我更新了我的第一篇帖子,让你知道我在做什么。