有没有办法在 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()
仅在测试时可见。
我正在使用 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()
仅在测试时可见。