【发布时间】:2016-06-20 05:42:02
【问题描述】:
我有一个测试应该在没有网络连接时测试错误消息的可见性,但我不知道如何让它显示?
@RunWith(AndroidJUnit4.class)
@LargeTest
public class PostsActivityTest {
@Rule
public final ActivityRule<PostsActivity> rule = new ActivityRule<>(PostsActivity.class);
PostsActivity postsActivity;
@Before
public void init() {
postsActivity = rule.get();
}
@Test
public void testShouldShowErrorViewOnNetworkError() {
postsActivity.showErrorMsg(); // doesn't work
onView(withId(R.id.error_view)).check(matches(isDisplayed()));
}
当调用 postsActivity.showErrorMsg(); 时,我收到一个崩溃,说明 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
这是PostsActivity中的showErrorMsg():
public void showErrorMsg() {
errorView.setVisibility(View.VISIBLE);
}
任何帮助表示赞赏。谢谢!
编辑:使用runOnUiThread 似乎有效。我不知道这是否是首选方式。
@Test
public void testShouldShowErrorViewOnNetworkError() {
postsActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
postsActivity.showErrorMsg();
}
});
onView(withId(R.id.error_view)).check(matches(isDisplayed()));
}
【问题讨论】:
标签: android unit-testing android-espresso