2012-06-27 65 views
2

我正在使用下面介紹的方法來驗證我測試的活動是否開始另一個活動。ActivityResult沒有返回到儀表測試中的調用活動

Instrumentation.addMonitor (IntentFilter filter, Instrumentation.ActivityResult result, boolean block) 

根據文檔,block參數控制監視器是否應該阻止活動開始(返回其固定結果)。這就是我想要實現的 - 我想將AcitivityResult返回到調用activity:onActivityResult()。我使用的代碼如下:

Intent resultIntent = new Intent(); 
Bundle bundle = new Bundle(); 
bundle.putLong(ActivityBundleKeys.KEY_TEST, 2L); 
resultIntent.putExtras(bundle); 
ActivityResult result = new ActivityResult(Activity.RESULT_OK, resultIntent); 
ActivityMonitor monitor = mInstr.addMonitor(MapViewActivity.class.getName(), result, true); 
mSolo.clickOnView(btnMap); //button properly clicked, activity started 
Activity currentActivity = mInstr.waitForMonitor(monitor); 

如果我理解正確的話,如果我通過「真正」的添加監視器(),開始應阻止和我的呼喚活動應該受到嘲笑的結果。這沒有發生。請求的活動正常開始,並在仿真器中可見。結果不會返回到調用活動。任何人都有類似的問題?

回答

0

好吧,我設法通過手動歸國嘲笑意圖解決這個問題:

Intent resultIntent = new Intent(); 
Bundle bundle = new Bundle(); 
bundle.putLong(ActivityBundleKeys.KEY_TEST, 2L); 
resultIntent.putExtras(bundle); 
ActivityResult result = new ActivityResult(Activity.RESULT_OK, resultIntent); 
//Don't know why, but "result" parameter in below call is not used 
ActivityMonitor monitor = mInstr.addMonitor(MapViewActivity.class.getName(), result, true); 
mSolo.clickOnView(btnMap); 
Activity currentActivity = mInstr.waitForMonitor(monitor);  
currentActivity.setResult(Activity.RESULT_OK, resultIntent);//manually seting the returned intent 
currentActivity.finish(); 
mInstr.waitForIdleSync(); 
2

獨奏使用,捕捉所有的意圖,只有匹配被擊中的第一監視器的內部活動監視器,所以你永遠不會被擊中,因爲它是在Solo的ActivityMonitor之後創建。

你可以把它通過前Solo的一個插入您的監測工作,像這樣:

ActivityMonitor soloMonitor = mSolo.getActivityMonitor(); 
mInstr.removeMonitor(soloMonitor); 
ActivityMonitor monitor = mInstr.addMonitor(MapViewActivity.class.getName(), result, true); 

// Put back Solo's monitor after yours 
mInstr.addMonitor(soloMonitor); 
相關問題