我有一个Robotium测试用例,应该是
如何跟踪在后台上传数据?我们可以使用多线程吗?
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();
}
这段代码是否正确?如果不建议我修改或正确的代码。
总是感谢帮助,
谢谢
答案 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();
}