Android 测试框架 performClick() 未启动 Activity



我有一个ActivityInstrumentationTestCase2,其中包含执行 Button.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());
    }

}

难道没有更好的方法吗?

这是我

的最终解决方案:

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

再次感谢埃里克;现在第二个活动通过按钮启动,测试正在等待它完成。

最新更新