我正在测试一个Android应用程序。目前,我正在为MainActivity编写测试。当选择“选项”菜单中的项时,会打开一些对话框:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
new DialogCredits(this).show();
return true;
/.../
}我想测试对话框是否从JUnit测试案例中成功打开。我当前的测试代码如下:
public class MainActivityFunctionalTest extends
ActivityInstrumentationTestCase2<MainActivity> {
private MainActivity activity;
private @Mock MenuItem item;
public MainActivityFunctionalTest() {
super(MainActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
MockitoAnnotations.initMocks(this);
setActivityInitialTouchMode(false);
activity = getActivity();
}
@SmallTest
public void testOnOptionsItemSelected() {
when(item.getItemId()).thenReturn(android.R.id.home);
assertTrue(activity.onOptionsItemSelected(item));
// verify that the correct dialog was successfully opened
// --->code missing here<---
}
}DialogCredits类的代码:
public class DialogCredits extends Dialog{
public DialogCredits(Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(R.string.dialog_credits_title);
setContentView(R.layout.dialog_credits);
final Dialog d = this;
Button buttonOk = (Button) findViewById(R.id.dialog_credits_button_ok);
buttonOk.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// close dialog
d.dismiss();
}
});
}
}发布于 2013-08-22 12:36:23
尝试罗布托,更少的代码和更好的方法,如waitForDialog()。
发布于 2013-08-22 12:31:19
DialogCredits dialog = new DialogCredits(this);
if(!dialog.isShowing())
{
dialog.show();
}把这段代码放在开关箱里
发布于 2013-08-22 12:40:59
我也有同样的问题。
我所做的是:
private YourDialog mDialog;
onCreate :
initDialog();
public void initDialog() {
mDialog = new YourDialog (this)
enter code here
}
public boolean isDialogShowing() {
return mDialog.isVisible();
}那么,您必须保持对对话框的引用,这样您就可以检查是否是visibilty,如果始终创建一个新的对话框,那么您将失去最后一个对话框引用。
https://stackoverflow.com/questions/18380474
复制相似问题