从AndroidTestCase调用活动

从AndroidTestCase调用活动,android,unit-testing,android-activity,android-testing,Android,Unit Testing,Android Activity,Android Testing,我正在编写一个android测试用例,它要求执行一个与被测试活动不同的活动(不是为了测试,而是为了访问contentresolver,以便我可以更改一些电话设置) 是否可以从测试用例或以其他方式启动活动 我知道用于测试活动的AndroidTestCase类,我正在测试中使用它,但是我需要使用ContentResolver来更改电话设置,然后测试被测活动的反应,因此我需要另一个应用程序组件来更改这些设置 注意:我释放了多活动测试背后的复杂性(需要一个ActivityManager),但我只想使用它

我正在编写一个android测试用例,它要求执行一个与被测试活动不同的活动(不是为了测试,而是为了访问contentresolver,以便我可以更改一些电话设置)

是否可以从测试用例或以其他方式启动活动

我知道用于测试活动的AndroidTestCase类,我正在测试中使用它,但是我需要使用ContentResolver来更改电话设置,然后测试被测活动的反应,因此我需要另一个应用程序组件来更改这些设置


注意:我释放了多活动测试背后的复杂性(需要一个ActivityManager),但我只想使用它的方法来更改设置,这样我甚至可以在onCreate方法中拥有逻辑

Android为测试活动提供了一个特殊的工具框架。您必须使用此框架,因为活动具有复杂的生命周期,在提供的框架之外无法调用。请在Android文档开发部分的测试链接下查看。如果这不能回答你的问题,你可以重新措辞一下

编辑

您实际上应该扩展ActivityUnitTestCase来测试活动,而不是AndroidTestCase。您可以获得更多特定于您需要测试的功能。如果扩展ActivityUnitTestCase,则有一个名为launchActivity的函数。它将启动您需要的活动,并为您提供该活动的实例,以便您可以对其调用set、get和finish等方法。这应该可以完成您一次操作单个和多个活动所需的任何操作

示例代码:

@MediumTest
public class Test extends ActivityUniTestCase<HelloActivity> {

    public Test(Class<HelloActivity> activityClass) {
        super(activityClass);
    }

    @MediumTest
    public void testLifeCycleCreate() {
        HelloActivity hActivity = startActivity(new Intent(Intent.ACTION_MAIN), null, null);
        getInstrumentation().callActivityOnStart(hActivity);
        getInstrumentation().callActivityOnResume(hActivity);

        GoodByeActivity gActivity = launchActivity("package.goodbye", GoodByeActivity.class, null);
        gActivity.finish();
    }
}
@MediumTest
公共类测试扩展ActivityUnitTestCase{
公共测试(类activityClass){
超级(活动类);
}
@中考
public void testLifeCycleCreate(){
HelloActivity hActivity=startActivity(新意图(Intent.ACTION_MAIN)、null、null);
getInstrumentation().callActivityOnStart(hActivity);
getInstrumentation().callActivityOnResume(hActivity);
GoodByeActivity gActivity=launchActivity(“package.再见”,GoodByeActivity.class,null);
gActivity.finish();
}
}

AndroidTestCase和ActivityInstrumentationTestCase2都提供了获取上下文的方法

AndroidTestCase:

getContext();
ActivityInstrumentationTestCase2

getInstrumentation().getContext();
您可以使用这些上下文来启动另一个活动,但是这些权限是从被测应用程序获得的,因此在我使用contentresolver的情况下,我只有在被测应用程序中更改设置的相同权限


在我的情况下,这是不好的,所以我必须创建一个单独的应用程序,它有自己的权限和一个后台服务,然后我可以通过使用上下文启动意图来控制它

谢谢你的回复。我知道这些测试机制,我使用AndroidTestCase来测试实际的活动,但我需要使用ContentResolver来更改一些电话设置,所以我需要一个活动来更改这些设置。这不可能是activity+1所说的“Activite有一个复杂的生命周期,在提供的框架之外是不可调用的”,因为我是这样理解它的。