android - 从 AndroidTestCase 调用 Activity

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

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

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

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

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

最佳答案

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

编辑

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

示例代码:

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

关于android - 从 AndroidTestCase 调用 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5434933/

相关文章:

java - 屏幕锁定后相机预览卡住

Android恢复堆栈中 fragment 的顺序

android - Xamarin 表单 : How to open an app from another app?

php - 使用 php 发送 whatsapp 消息

java - 如何在android中的父子 Activity 之间进行通信

javascript - 在 Angular.js 单元测试中,是否约定在 '$' 前面省略 'scope' 而不是 '$rootScope'(或其他注入(inject)服务)?

PHPUnit 警告 - 未配置过滤器,不会处理代码覆盖率

android - Ubuntu 上 Android Studio 的键盘问题

android - 如何创建像 android google chrome tab 这样的 android listview

unit-testing - Go:如何为多个包运行测试?