use*_*390 5 java testing android android-studio
我一直在尝试将我的 Robolectic 测试用例移至 Android X 测试。我遵循了文档,但无法通过 Activity Scenario Launch API 启动活动。
https://developer.android.com/reference/androidx/test/core/app/ActivityScenario
http://robolectric.org/androidx_test
protected void setupActivity() {
ActivityScenario<VisitorExemptionActivity> scenario = ActivityScenario.launch(VisitorExemptionActivity.class);
scenario.moveToState(Lifecycle.State.CREATED);// Activity destroyed before reaching to this point.
}
Run Code Online (Sandbox Code Playgroud)
除了 onStart 之外,上面的代码不会调用任何 android 生命周期,抛出以下异常并立即销毁活动。
java.lang.IllegalStateException:由于 Activity 已被销毁,因此无法移动到状态“CREATED”
当我用 Robolectric 尝试相同的代码时。它工作正常并调用所有生命周期。oncreate 、 onstart 和 onResume。
protected void setupActivity() {
activityController = Robolectric.buildActivity(VisitorExemptionActivity.class).setup();
activityController.get();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码调用了所有的生命周期。
请你能向我解释我做错了什么。
提前致谢。
我遇到了类似的问题,经过一些调试和测试“测试”后:
onActivity在我的 Activity 之后调用onCreate(...)。onCreate(...)启动一个后台线程,该线程根据条件调用所说 Activity 的finish().onActivity如果 Activityfinish()在它之前被调用,则永远不会被调用。该错误可能会显示“已销毁”,但onActivity的文档称,如果 Activity 处于“完成”或“完成”状态,它甚至会抛出错误。
这是一个惊喜,因为我的测试都是关于检查是否finish()在设置活动的正确属性后被调用。
溶液A;我未弃用ActivityTestRule,您可能已经知道,这没什么大不了的,并且是众所周知的 AndroidX 库一直为 Android 的 API(不是它自己的 API)所做的事情。
从以下位置获取ActivityTestRule.java文件:
https://gist.github.com/top-master/2127623cd837df9a9633714c44a56e16
溶液B;在您的活动中添加并使用类似的内容:
protected void finishSafely() {
if (MyApp.isTestRun()) {
MyApp.triggerTestHook("MyActivity:finishing");
} else {
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
您需要决定如何实现
isTestRun()和triggerTestHook(...)方法(它们的名称解释了它们的作用)。
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |