有没有办法在 Android 仪器化测试 Kotlin (ActivityTestRule) 中停止启动 activity

Is there a way to stop launching activity in Android instrumented tests Kotlin (ActivityTestRule)

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

这是我的测试class

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

    @Before
    fun setUp() {
    }

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

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

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

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

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

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

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


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

private boolean shouldNavigate = true;

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

这样您就可以在测试 class 中 enable/disable 这个。使用注释 @VisisbleForTesting,这不会污染 public API,因为 .setShouldNavigate() 仅在测试时可见。