首页 > 解决方案 > 有没有办法停止在 Android 仪器测试 Kotlin (ActivityTestRule) 中启动活动

问题描述

我正在使用 Kotlin 开发一个 Android 应用程序。我正在将仪器测试添加到我的项目中。现在,我正在寻找一种方法来启用/禁用启动活动的逻辑,因为它可以使我的测试以意想不到的方式表现。

这是我的测试课

@RunWith(AndroidJUnit4::class)
class LoginFormTest {
    @Rule @JvmField
    val loginActivityRule: ActivityTestRule<LoginActivity> = ActivityTestRule<LoginActivity>(LoginActivity::class.java)

    @Before
    fun setUp() {
    }

    @Test
    fun loginFormRendersErrorMessageWhenRequestThrowsError() {
        //logic
    }
}

这只是测试类的签名。正如您在代码中看到的,我正在测试 LoginActivity。单击按钮时,LoginAcitivy 正在启动另一个活动。有没有办法禁止在测试中启动活动。然后在另一种测试方法中,我可能会再次启用它。有没有办法做到这一点?

标签: androidkotlinandroid-activityinstrumented-test

解决方案


可以使用ActivityTestRule来设置启动Intent...

然后让LoginActivity行为不同,例如。根据Intent动作。

然而,尽管这在技术上是可行的,但这可能不是建议的方法。

不单击按钮将消除调整应用程序代码的需求。

在任何情况下,您都无法从测试 APK 中更改调试 APK。


一种不那么侵入性的方式可能是类似的:

private boolean shouldNavigate = true;

@VisisbleForTesting
public void setShouldNavigate(boolean value) {
    this.shouldNavigate = value;
}

这样您就可以在测试类中启用/禁用它。使用 annotation @VisisbleForTesting,这不会污染publicAPI,因为.setShouldNavigate()仅在测试时可见。


推荐阅读