美文网首页
深入浅出Android单元测试(四)启动Activity

深入浅出Android单元测试(四)启动Activity

作者: 程序引力 | 来源:发表于2018-11-13 23:53 被阅读180次
    欢迎关注程序引力

    开发者有时希望能够在单元测试中显示界面,那应该如何做呢?

    若有错漏,烦请斧正。转载请注明出处。

    单元测试主要是针对后台逻辑的测试,但一些业务与界面相关的话,就不仅仅涉及到后台代码了,可能需要启动Activity,显示界面。本文将介绍若干在单元测试中启动Activity的方式。

    添加依赖

    单元测试启动Activity必然就依赖Android库了,自然会考虑使用AndroidJunitRunner,为此需要在模块(如app)的build.gradle中添加依赖:

        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
    

    撰写测试代码

    在AndroidStudio中,通过Ctrl + Shift + T 可以对制定类创建测试类,或在新建module时自动生成的测试类中,撰写如下代码:

    @RunWith(AndroidJUnit4.class)
    public class ExampleInstrumentedTest {
        @Test
        public void useAppContext() {
            Context appContext = InstrumentationRegistry.getTargetContext();
            Intent intent = new Intent(appContext,AnotherActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            appContext.startActivity(intent);
        }
    }
    

    从代码中可以看出,通过InstrumentationRegistry获取到context,在初始化一个intent,跳转到AnotherActivity,然后通过context的startActivity方法跳转。

    通过AndroidTestRule跳转

    AndroidTestRule作为安卓基础类库,提供了对单个Activity进行测试的能力。为了使用它,一般需要在build.gradle中添加依赖:

    androidTestImplementation 'com.android.support.test:rule:1.0.2'
    

    对于AndroidTestRule,提供了多个构造方法,其中最全面的构造方法提供3个参数传入,分别是

    参数 描述
    activityClass 需要跳转的class
    initialTouchMode 是否touch模式
    launchActivity 是否每个测试方法都启动Activity

    下面是示例代码:

    @RunWith(AndroidJUnit4.class)
    public class ExampleInstrumentedTest {
        @Test
        public void useAppContext() {
            // Context of the app under test.
            Context appContext = InstrumentationRegistry.getTargetContext();
            
            Intent intent = new Intent(appContext,OuterActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
            ActivityTestRule<OuterActivity> activityTestRule = new ActivityTestRule<>(OuterActivity.class, false, false);
            activityTestRule.launchActivity(intent);
        }
    }
    

    与通过context直接启动Activity不同,该方法是通过初始化一个ActivityTestRule对象,再通过该对象去启动Activity。

    相关文章

      网友评论

          本文标题:深入浅出Android单元测试(四)启动Activity

          本文链接:https://www.haomeiwen.com/subject/magrfqtx.html