Java 警报对话框崩溃Android测试-“;Can';t在未调用Looper.prepare()的线程内创建处理程序;
当我正常运行该应用程序时,它运行良好并显示警报对话框,但当我在插入指令的测试中运行它时,它在Java 警报对话框崩溃Android测试-“;Can';t在未调用Looper.prepare()的线程内创建处理程序;,java,android,android-espresso,Java,Android,Android Espresso,当我正常运行该应用程序时,它运行良好并显示警报对话框,但当我在插入指令的测试中运行它时,它在builder中崩溃。在第一行创建: AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setMessage(message) .setCancelable(false) .setPositiveButton("Yes", ne
builder中崩溃。在第一行创建:
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setMessage(message)
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
login(activity);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
activity.finish();
}
});
AlertDialog alert = builder.create(); // Crash
alert.show();
除此之外:
final AlertDialog dialog = new AlertDialog(P.mContext, mTheme);
这将关闭应用程序,然后测试失败,因为没有任何活动:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
这是一个线程问题,但根据答案,这不是我所期望的:
要验证对话框是否出现,只需检查对话框中是否显示文本视图:
onView(withText(“dialogText”))。检查(匹配项(isDisplayed())代码>
我不明白如果在创建对话框之前应用程序崩溃,我应该如何检查文本是否显示
编辑:
一些可能对你有帮助的事情
调用mActivityRule.getActivity().showOptionDialog()代码>
在浓缩咖啡测试中不是“浓缩咖啡”方式。除非对测试进行了正确的注释,否则它不会在UI线程上运行,因此在这种情况下,您将从检测线程调用应该在UI线程上执行的操作。您可以通过执行以下操作来解决此问题:
rule.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
mActivityRule.getActivity().showOptionDialog();
}
});
这样做可能需要您构建自己的同步逻辑,以确保在发生这种情况之前不会运行将来的Espresso语句
使用Espresso测试这一点的更好方法是使用onView(XXX)。在通常会调用showOptions对话框()
的UI控件上执行(单击())
此外,您不需要自己解析传递给withText()
的字符串,您只需使用字符串资源id,但这不是您看到的问题的原因
一些可能对你有帮助的事情
调用mActivityRule.getActivity().showOptionDialog()代码>
在浓缩咖啡测试中不是“浓缩咖啡”方式。除非对测试进行了正确的注释,否则它不会在UI线程上运行,因此在这种情况下,您将从检测线程调用应该在UI线程上执行的操作。您可以通过执行以下操作来解决此问题:
rule.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
mActivityRule.getActivity().showOptionDialog();
}
});
这样做可能需要您构建自己的同步逻辑,以确保在发生这种情况之前不会运行将来的Espresso语句
使用Espresso测试这一点的更好方法是使用onView(XXX)。在通常会调用showOptions对话框()
的UI控件上执行(单击())
此外,您不需要自己解析传递给withText()
的字符串,您只需使用字符串资源id,但这不是您看到的问题的原因
您是否调用显示测试对话框的方法?请发布您的测试code@Be_Negative对它在我从测试中调用的活动中的一个方法中。@jdonmoyer我编辑了我的问题并添加了它。您是否调用显示测试对话框的方法?请发布您的测试code@Be_Negative对它在我从测试中调用的活动中的一个方法中。@jdonmoyer我编辑了我的问题并添加了它的答案,但是单击按钮不会触发ShowOptions对话框()。它是在某个HTTP响应后触发的。@发问者,然后您需要使用Espresso为在UIThread上运行该方法提供的各种机制之一。@jdonmoyer我有一个类似的问题,请您帮忙,谢谢,但是单击按钮不会触发ShowOptions Dialog()。它是在某个HTTP响应后触发的。@提问者,那么您需要使用Espresso为在UIThread上运行该方法提供的各种机制中的一种。@jdonmoyer我有一个类似的问题,您能帮我解决吗
android.support.test.espresso.NoActivityResumedException: No activities in stage RESUMED. Did you forget to launch the activity. (test.getActivity() or similar)?
mActivityRule.launchActivity(intent);
mActivityRule.getActivity().showOptionDialog();
onView(withText(mActivityRule.getActivity().getString(R.string.dialogText))).check(matches(isDisplayed()));