如果按钮上的click事件触发了AsyncTask
,我该如何测试它 - 我怎么能等到AsyncTask完成?
注意我总是可以直接在我的测试方法中执行AsyncTask
,我知道如何测试这种情况。但是,如果我坚持使用onClick
模拟performClick()
事件,我仍然可以测试我的注册过程吗?
MainActivityFunctionalTest
public class MainActivityFunctionalTest extends
ActivityInstrumentationTestCase2<MainActivity> {
// ...
public void testRegistration() {
ImageButton submitBtn = (ImageButton) solo.getView(R.id.BtnR);
assertNotNull(submitBtn);
submitBtn.performClick();
// How to do something when the registration is done?
}
// ...
}
MainActivity (待测项目)
ImageButton submitBtn = (ImageButton) findViewById(R.id.BtnRegister);
submitBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
sendRegistration();
}
});
public void sendRegistration() {
Processor processor = new Processor();// subclass of AsyncTask
processor.execute();
}
答案 0 :(得分:3)
你可以这样做:
myAsyn obj = new myAsyn();
obj.execute();
while(obj.getStatus()==AsynTask.status.Finished)
{
//wait here
}
//when it finishes , this code will going to execute.
答案 1 :(得分:1)
你也可以使用get()方法等到任务完成。 http://developer.android.com/reference/android/os/AsyncTask.html#get%28%29
答案 2 :(得分:1)
使用Activity
中的ActivityTestCase
。按ID查找视图,只需将事件发送到您的视图即可。
有关runTestOnUiThread的更多信息:
private void buttonTest(Activity activity, int buttonId){
Button button = (Button) activity.findViewById(buttonId);
assertNotNull("Button not allowed to be null", button);
button.performClick();
}
private void runButtonTest(Activity activity, int buttonId){
getInstrumentation().runTestOnUiThread(new Runnable() {
public void run() {
buttonTest(activity,buttonId);
}
Object o = activity.mAsyncTask.get();
assertNotNull(o);
}
或者,您可以等到Status
的{{1}}更改为AsyncTask
。
答案 3 :(得分:0)
您可以使用可以执行操作的asynctask状态来查看更多详细信息,请查看以下链接
http://developer.android.com/reference/android/os/AsyncTask.Status.html