android - 有没有办法停止在 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 正在启动另一个活动。有没有办法禁止在测试中启动活动。然后在另一种测试方法中,我可能会再次启用它。有没有办法做到这一点?
解决方案
可以使用ActivityTestRule
来设置启动Intent
...
然后让LoginActivity
行为不同,例如。根据Intent
动作。
然而,尽管这在技术上是可行的,但这可能不是建议的方法。
不单击按钮将消除调整应用程序代码的需求。
在任何情况下,您都无法从测试 APK 中更改调试 APK。
一种不那么侵入性的方式可能是类似的:
private boolean shouldNavigate = true;
@VisisbleForTesting
public void setShouldNavigate(boolean value) {
this.shouldNavigate = value;
}
这样您就可以在测试类中启用/禁用它。使用 annotation @VisisbleForTesting
,这不会污染public
API,因为.setShouldNavigate()
仅在测试时可见。
推荐阅读
- python - 使用特定标准的列表中的项目组合
- reactjs - Next.js : 带有 domain.com/category/post 的 URL
- arrays - 结构数组只取 C 中的最后一个值
- sql - 将列值从第二行拉到最后一行
- python - 是否可以在文件中找到所有 md5 哈希并将其保存到另一个文件中?
- android - 升级到 SDK 31 Android 后应用开始崩溃
- resteasy - MediaType 在 Quarkus 的 MessageBodyWriter 中始终是 application/json,带有 quarkus-resteasy-reactive
- c++ - 我可以在 C++ 中将函数指针分配给具有 const 参数的函数吗?
- html - 单击复选框时,是否可以从左到右文本装饰为 CSS 行设置动画?
- python-3.x - 如何检测熊猫数据框在两列范围之间是否有重复项?