【问题标题】:Calling an activity from an AndroidTestCase从 AndroidTestCase 调用活动
【发布时间】:2011-07-23 00:56:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android unit-testing android-activity android-testing


    【解决方案1】:

    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();
        }
    }
    

    【讨论】:

    • 感谢您的回复。我知道这些测试机制,并且我使用 AndroidTestCase 来测试实际活动,但是我需要使用 ContentResolver 来更改一些电话设置,所以我需要一个活动来更改此设置。这不可能是活动
    • +1 表示“活动具有复杂的生命周期,并且在提供的框架之外是不可调用的”,因为这就是我的理解。
    【解决方案2】:

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

    AndroidTestCase:

    getContext();
    

    ActivityInstrumentationTestCase2

    getInstrumentation().getContext();
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多