【发布时间】:2015-06-02 12:42:43
【问题描述】:
编辑:更新了描述和错误信息并添加了一些图片。还是有这个问题。
我在运行 espresso 测试时多次出现一个奇怪的错误。几次成功的测试运行后,测试开始失败,但出现以下异常:
06-23 13:04:48.438 info TestRunner failed: WhenNavigatingToReportsThenCorrectViewShouldBeShown(com.myapp.ui.views.MainActivityTest)
06-23 13:04:48.439 info TestRunner ----- begin exception -----
06-23 13:04:48.441 info TestRunner android.support.test.espresso.NoActivityResumedException: No activities in stage RESUMED. Did you forget to launch the activity. (test.getActivity() or similar)?
06-23 13:04:48.441 info TestRunner at dalvik.system.VMStack.getThreadStackTrace(Native Method)
06-23 13:04:48.441 info TestRunner at java.lang.Thread.getStackTrace(Thread.java:580)
06-23 13:04:48.441 info TestRunner at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:82)
06-23 13:04:48.441 info TestRunner at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:53)
06-23 13:04:48.441 info TestRunner at android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:184)
06-23 13:04:48.441 info TestRunner at android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:115)
06-23 13:04:48.441 info TestRunner at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:87)
06-23 13:04:48.441 info TestRunner at com.myapp.ui.views.MainActivityTest.WhenNavigatingToReportsThenCorrectViewShouldBeShown(MainActivityTest.java:96)
06-23 13:04:48.441 info TestRunner at java.lang.reflect.Method.invoke(Native Method)
06-23 13:04:48.441 info TestRunner at java.lang.reflect.Method.invoke(Method.java:372)
06-23 13:04:48.441 info TestRunner at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
06-23 13:04:48.441 info TestRunner at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
06-23 13:04:48.441 info TestRunner at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
06-23 13:04:48.441 info TestRunner at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
06-23 13:04:48.441 info TestRunner at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
06-23 13:04:48.441 info TestRunner at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55)
06-23 13:04:48.441 info TestRunner at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:257)
06-23 13:04:48.441 info TestRunner at org.junit.rules.RunRules.evaluate(RunRules.java:18)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
06-23 13:04:48.441 info TestRunner at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
06-23 13:04:48.441 info TestRunner at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
06-23 13:04:48.441 info TestRunner at org.junit.runners.Suite.runChild(Suite.java:128)
06-23 13:04:48.441 info TestRunner at org.junit.runners.Suite.runChild(Suite.java:24)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
06-23 13:04:48.441 info TestRunner at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
06-23 13:04:48.441 info TestRunner at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
06-23 13:04:48.441 info TestRunner at org.junit.runner.JUnitCore.run(JUnitCore.java:136)
06-23 13:04:48.441 info TestRunner at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:54)
06-23 13:04:48.441 info TestRunner at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:228)
06-23 13:04:48.441 info TestRunner at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837)
06-23 13:04:48.441 info TestRunner ----- end exception -----
06-23 13:04:48.443 info TestRunner finished: WhenNavigatingToReportsThenCorrectViewShouldBeShown(com.myapp.ui.views.MainActivityTest)
我有一个简单的应用程序,此时导航到仅包含文本的页面,测试应该导航到每个页面并识别此文本。
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule(MainActivity.class);
private MainActivity mainActivity;
@Before
public void setActivity() {
mainActivity = mActivityRule.getActivity();
}
@Test
public void WhenNavigatingToReportsThenCorrectViewShouldBeShown() {
onView(allOf(withId(R.id.icon), hasSibling(withText(R.string.reports)))).perform(click());
onView(withText("This is the Reports Activity.")).check(matches(isDisplayed()));
Spoon.screenshot(mainActivity, "main_view");
}
}
此故障仅发生在真实设备上。在模拟设备上,测试工作正常。请参阅下面的图片。
所有测试都由 gradle 脚本执行,从删除以前的应用程序和测试 api 开始,然后再次安装。确保环境清洁。日志表明卸载已成功。然后部署新应用程序并开始运行测试。现在他们失败了。
如果测试失败,直到我手动从设备中删除应用程序和测试 api,我才能再次获得成功的测试。但只有一段时间,直到发生同样的错误。
为什么我会得到 NoActivityResumedException,我找不到一个很好的例子来说明它是什么以及它何时发生。
【问题讨论】:
-
我看过其他帖子,他们建议切换动画(在开发者设置中)。
-
你找到解决办法了吗?
-
不是一个明确的解决方案。但注意到它经常发生在系统窗口弹出时。当活动期望结果时也是如此。找到了一些可能适用于某些问题的答案:即stackoverflow.com/questions/21703304/…
-
在我的情况下,正如@Pnemonic 指出的那样,动画已打开。希望这对其他人有所帮助。
-
我的项目中有两个 android 应用程序模块,当我在运行时使用单个命令(./gradlew spoon 或 ./gradlew connectedDebugAndroidTest)在所有模块中运行测试时,在不同的测试中随机出现此错误仅测试特定模块 (./gradlew module1:connectedDebugAndroidTest) 此错误消失。不知道为什么
标签: android testing android-espresso