3

我正在编写一个 android 测试用例,它需要对正在测试的 Activity 执行单独的 Activity(不是为了测试,而是为了获得对 contentresolver 的访问权限,以便我可以更改一些电话设置)。

是否有可能从测试用例或以其他方式开始活动。

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

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

4

2 回答 2

4

Android 为测试活动提供了一个特殊的检测框架。您必须使用这个框架,因为活动有一个复杂的生命周期,在这个提供的框架之外是不可调用的。查看 Android 文档开发部分的测试链接下的Activity Testing。如果这不能回答你的问题,你可能会改写一下。

编辑

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

示例代码:

@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();
    }
}
于 2011-03-25T18:18:34.680 回答
2

AndroidTestCase 和 ActivityInstrumentationTestCase2 都提供了获取 Context 的方法

安卓测试用例:

getContext();

ActivityInstrumentationTestCase2

getInstrumentation().getContext();

您可以使用这些上下文来启动另一个活动,但是权限是从被测应用程序中采用的,所以在我使用 contentresolver 的情况下,我只有相同的权限来更改我在被测应用程序中所做的设置。

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

于 2011-04-12T22:32:43.040 回答