【问题标题】:Is there a way to stop launching activity in Android instrumented tests Kotlin (ActivityTestRule)有没有办法停止在 Android 仪器测试 Kotlin (ActivityTestRule) 中启动活动
【发布时间】:2019-09-25 22:33:17
【问题描述】:

我正在使用 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 正在启动另一个活动。有没有办法禁止在测试中启动活动。然后在另一种测试方法中,我可能会再次启用它。有没有办法做到这一点?

【问题讨论】:

    标签: android kotlin android-activity instrumented-test


    【解决方案1】:

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

    然后让LoginActivity 表现不同,例如。基于Intent 操作。

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

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

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


    侵入性较小的方式可能是类似的:

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

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

    【讨论】:

    • @WaiYanHein 我添加了另一种方法,可以满足您的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    相关资源
    最近更新 更多