1

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();            
            }
        });       
    }

}
4

3 に答える 3

1

Robotiumを試してみてください。コードははるかに少なく、 のようなより優れた方法ですwaitForDialog()

于 2013-08-22T12:36:23.710 に答える
0
DialogCredits dialog  = new DialogCredits(this); 

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

このコードをスイッチケースに入れてください

于 2013-08-22T12:31:19.697 に答える