我正在使用 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。单击按钮时,登录活动正在启动另一个活动。有没有办法禁止在测试中启动活动。然后在另一种测试方法中,我可能会再次启用它。有没有办法做到这一点?
可以使用ActivityTestRule
来设置启动Intent
...
然后让LoginActivity
表现不同,例如。 基于Intent
动作。
但是,尽管这在技术上是可行的,但这可能不是建议的方法。
不单击该按钮将消除调整应用程序代码的需求。
在任何情况下,您都无法从测试 APK 中更改调试 APK。
一种侵入性较小的方式可能是类似的:
private boolean shouldNavigate = true;
@VisisbleForTesting
public void setShouldNavigate(boolean value) {
this.shouldNavigate = value;
}
以便您可以从测试类中启用/禁用此功能。使用注释@VisisbleForTesting
,这不会污染public
API,因为.setShouldNavigate()
仅在测试时可见。