首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android测试:如果对话框打开了,如何从JUnit测试案例中验证?

Android测试:如果对话框打开了,如何从JUnit测试案例中验证?
EN

Stack Overflow用户
提问于 2013-08-22 12:29:33
回答 3查看 2K关注 0票数 1

我正在测试一个Android应用程序。目前,我正在为MainActivity编写测试。当选择“选项”菜单中的项时,会打开一些对话框:

代码语言:javascript
复制
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { 
    case android.R.id.home:    
        new DialogCredits(this).show();         
        return true; 
/.../
}

我想测试对话框是否从JUnit测试案例中成功打开。我当前的测试代码如下:

代码语言:javascript
复制
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类的代码:

代码语言:javascript
复制
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();            
            }
        });       
    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-22 12:36:23

尝试罗布托,更少的代码和更好的方法,如waitForDialog()

票数 1
EN

Stack Overflow用户

发布于 2013-08-22 12:31:19

代码语言:javascript
复制
DialogCredits dialog  = new DialogCredits(this); 

if(!dialog.isShowing())
{  
    dialog.show(); 
}

把这段代码放在开关箱里

票数 0
EN

Stack Overflow用户

发布于 2013-08-22 12:40:59

我也有同样的问题。

我所做的是:

代码语言:javascript
复制
private YourDialog mDialog;

onCreate :
initDialog();

public void initDialog() {    
mDialog = new YourDialog (this)
    enter code here
}
public boolean isDialogShowing() {
return mDialog.isVisible();
}

那么,您必须保持对对话框的引用,这样您就可以检查是否是visibilty,如果始终创建一个新的对话框,那么您将失去最后一个对话框引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18380474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档