3

ActivityInstrumentationTestCase2Button.click()を実行するテストがあります。ボタンは、いくつかの作業を行うために他のアクティビティを開始する必要があります。Button.performClick()は正しく実行されていると思いますが、他のアクティビティが実行される前にテストが終了しています。

@UiThreadTest
public void test() {

    Intent i = new Intent(this.myActivity, MyActivity.class);
    myActivity.startActivity(i);    


    Button button = (Button) myActivity.findViewById(R.id.button);
    button.performClick();


}

私はうまくいった以下を試しましたが、これは良い解決策というよりはむしろ回避策だと思います。

public void test() {

    Intent i = new Intent(this.myActivity, MyActivity.class);
    myActivity.startActivity(i);    


    Button button = (Button) myActivity.findViewById(R.id.button);
    button.performClick();

    try {
    Thread.sleep(50000);
    } catch (InterruptedException e) {
        Log.e("MyTest", e.getMessage());
    }


}

より良い方法はありませんか?

4

1 に答える 1

0

これが私の最終的な解決策です。

public void test() {

    Instrumentation instrumentation = getInstrumentation();

    // Prepare a monitor for your activity
    Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(MyActivity.class.getName(), null, false);

    // Start your activity manually
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setClassName(instrumentation.getTargetContext(), MyActivity.class.getName());
    instrumentation.startActivitySync(intent);

    Activity myActivity = getInstrumentation().waitForMonitor(monitor);

    Button upSend = (Button) myActivity.findViewById(R.id.button);
    upSend.performClick();

    Log.d("MyTest", "button clicked");

    //wait for SecondActivity to start (called by MyActivity)
    monitor = instrumentation.addMonitor(SecondActivity.class.getName(), null, false);
    Activity secondActivity = getInstrumentation().waitForMonitor(monitor);

    int count = 0;

    //wait until SecondActivity is finishing
    while(!secondActivity.isFinishing()) {

        Log.d("MyTest", "waiting - " + ++count);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {

            Log.e("MyTest",e.getMessage());
        }
    }

}

再びエリックにThx; これで、2番目のアクティビティがボタンで開始され、テストが終了するのを待っています。

于 2012-12-13T11:05:04.153 に答える