Robotium测试用例

时间:2013-12-19 19:00:47

标签: android robotium

我有一个Robotium测试用例,应该是

  • UI应用程序开始将数据上传到服务器
  • 用户切换到设备上的其他应用程序
  • 上传操作正在后台运行
  • 用户来到主UI应用程序

如何跟踪在后台上传数据?我们可以使用多线程吗?

 try {
        mSolo.clickOnMenuItem("UPLOAD");
        mSolo.sleep(1000);
        Instrumentation inst = new Instrumentation();
        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
        mSolo.waitForActivity(Settings.ACTION_APPLICATION_SETTINGS);
        mSolo.goBack();
        mSolo.assertCurrentActivity("main",
                UIActivity.class);

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这段代码是否正确?如果不建议我修改或正确的代码。

总是感谢帮助,

谢谢

2 个答案:

答案 0 :(得分:1)

除非您使用自己的密钥签署第三方应用程序,否则无法与其他应用程序进行交互(请参阅black box testing)。

但你可以按 Home Back 并启动Intents。以下代码未经测试,但希望能给您一个想法:

try {
    mSolo.clickOnMenuItem("UPLOAD"); // start upload
    mSolo.sleep(1000);
    mSolo.goBack(); // leave app
    ...
    Intent intent = new Intent("com.company.another.app.SomeActivity");
    startActivity(inent); // start another app
    ...
    // option one: get app context and use it for access on preferences, etc.
    Context context = this.getInstrumentation().getTargetContext().getApplicationContext();  
    // option two: wait for logs that you write while uploading     
    solo.waitForLogMessage("Upload completed");
    ...
    Intent intent = new Intent("com.myapp.MyMainUIActivity");
    startActivity(inent); // start own Main Activity again
    ...
} catch (Exception e) {
    e.printStackTrace();
}

因此,您可以使用日志消息,偏好设置或应用的任何其他方法来跟进上传进度。

答案 1 :(得分:0)

您无法离开应用程序并使用Instrumentation再次运行它。这部分不正确:

Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

为什么要创建新的仪器?你可以简单地运行:

getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
顺便说一句,solo.goBack()只是这样做,所以用仪器调用它是没有意义的。我只想将其重写为:

try {
    mSolo.clickOnMenuItem("UPLOAD");
    mSolo.sleep(1000);
    mSolo.goBack();
    assertTrue(mSolo.waitForActivity(Settings.ACTION_APPLICATION_SETTINGS));
    mSolo.goBack();
    mSolo.assertCurrentActivity("main", UIActivity.class);
} catch (Exception e) {
    e.printStackTrace();
}