如何为Android中的深层链接编写测试?

时间:2017-03-22 12:08:00

标签: android deep-linking android-testing android-espresso

我想使用UI测试框架(Espresso)为Android app with deep link cases编写测试 - 仅使用ACTION_VIEW意图启动应用程序并检查打开屏幕上的所有视图。

但看起来像Espresso(甚至espresso-intents)还没有这个功能,并且需要定义Activity类。

我尝试过这种方式,但它无法正常运行,因为已启动应用两次 - 使用AppLauncherActivity标准启动(Espresso需要)并通过深层链接启动。

@RunWith(AndroidJUnit4.class)
public class DeeplinkAppLauncherTest {

    @Rule
    public ActivityTestRule<AppLauncherActivity> activityRule = new ActivityTestRule<>(AppLauncherActivity.class);

    @Test
    public void testDeeplinkAfterScollDownAndBackUp() {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("myapp://search/777"));
        activityRule.launchActivity(intent);

        onView(withId(R.id.search_panel)).check(matches(isDisplayed()));
    }

}

我想在没有标准发布的情况下仅使用深层链接启动测试应用。 你知道吗,怎么做?

3 个答案:

答案 0 :(得分:4)

我找到了一个选项 - 只为现有意图添加深层链接打开参数并使用标准活动启动:

reduceRight

答案 1 :(得分:2)

@Rule
public ActivityTestRule<AppLauncherActivity> activityRule = new ActivityTestRule<>(AppLauncherActivity.class, false, false);

有多个构造函数可用于创建ActivityTestRule。第三个是launchActivity。如上所示将其设置为false,因为您之后使用activityRule.launchActivity(intent)手动启动该活动。这应该可以防止它开始两次

答案 2 :(得分:0)

接受的答案很有帮助,但现在 ActivityTestRule 类已经deprecated

我们可以使用 ActivityScenario 代替。

这是一个 Kotlin 示例:

class MyDeepLinkTest {

    private lateinit var scenario: ActivityScenario<LoadingActivity>

    @Before
    fun setUp() {
        Intents.init()
    }

    @After
    fun tearDown() {
        Intents.release()
        scenario.close()
    }

    @Test
    fun myTest() {
        val intent = Intent(ApplicationProvider.getApplicationContext(), LoadingActivity::class.java)
            .putExtra("example_extra1", "Value 1")
            .putExtra("example_extra2", 777)

        scenario = ActivityScenario.launch(intent)

        // Test code goes here (e.g. intent causes to start MainActivity)
        intended(hasComponent(MainActivity::class.java.name))
    }

}

我还通过其他示例找到了这个 blog post