java – 在Android上执行JUnit测试的CalledFromWrongThreadExcep
发布时间:2020-12-15 08:31:51 所属栏目:Java 来源:网络整理
导读:我是JUnit和 Android的新手,很难找到与Android合作的好测试文档. 我有一个测试项目,其中包含扩展ActivityInstrumentationTestCase2的类.检查GUI状态(启用了什么,相对位置等)的简单测试按预期工作.但是,当我尝试执行按钮单击操作时,会抛出错误的线程异常.任何
我是JUnit和
Android的新手,很难找到与Android合作的好测试文档.
我有一个测试项目,其中包含扩展ActivityInstrumentationTestCase2的类.检查GUI状态(启用了什么,相对位置等)的简单测试按预期工作.但是,当我尝试执行按钮单击操作时,会抛出错误的线程异常.任何人都知道如何解决这个问题? 作为后续,有没有人对Android的测试或TDD免费资源有什么好的建议?我正在使用Eclipse / MotoDev. 谢谢 根据我调用每个按钮的方式,我可以得到不同的故障痕迹,但在此处包含一个以供参考: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. at android.view.ViewRoot.checkThread(ViewRoot.java:2683) at android.view.ViewRoot.playSoundEffect(ViewRoot.java:2472) at android.view.View.playSoundEffect(View.java:8307) at android.view.View.performClick(View.java:2363) at com.android.tigerslair.demo1.test.GoTest.setUp(GoTest.java:49) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447) 这是简单的setup()例程: @Override protected void setUp() throws Exception { super.setUp(); TigersLair activity=getActivity(); mGoBtn = (Button) activity.findViewById(R.id.go); mGoBtn.performClick(); } 如果我在setUp()或实际测试中执行单击并不重要. 解决方法
您需要执行UIThread中的所有点击.
这可以通过以下两个例子来完成. @UiThreadTest public void testApp() { TestApp activity = getActivity(); Button mGoBtn = (Button) activity.findViewById(R.id.testbutton); mGoBtn.performClick(); } 要么 public void testApp2() throws Throwable { TestApp activity = getActivity(); final Button mGoBtn = (Button) activity.findViewById(R.id.testbutton); runTestOnUiThread(new Runnable() { @Override public void run() { mGoBtn.performClick(); } }); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读