您可以通過編寫一個特殊活動來達到這個目的,該活動的唯一目的是啓動您正在測試結果的活動,並保存結果以供您聲明正確性。
例如,您可以創建一個名爲ResultReceiverActivity
的活動。給它三種方法:getResultCode
,getResultData
和getReceivedRequestCode
,它可以用來驗證測試的活動返回了正確的值。您將創建一個擴展爲ActivityInstrumentationTestCase2
的測試用例,通用參數爲ResultReceiverActivity
。調用getActivity
將爲您提供活動實例。
public class ReturnedResultTest
extends ActivityInstrumentationTestCase2<ResultReceiverActivity> {
public void testReturnedResult() {
ResultReceiverActivity a = getActivity();
assertEquals(Activity.RESULT_OK, a.getResultCode());
assertEquals("myResult", a.getResultData().getStringExtra("test"));
assertEquals(0x9999, a.getReceivedRequestCode());
}
}
ResultReceiverActivity
需要重寫onActivityResult
,當然,應該只是存儲方法參數的值在其領域,像這樣:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
this.receivedRequestCode = requestCode;
this.resultCode = resultCode;
this.resultData = data;
}
當然,你可能需要定製活動ResultReceiverActivity
開始,並且您可以通過在其onCreate
方法中使用getIntent
來輕鬆完成此操作。在您的測試案例中,在調用getActivity設置用於啓動活動的Intent之前,請先調用setActivityIntent。
http://stackoverflow.com/questions/4160755/testing-that-an-activity-called-setresult – 2011-04-07 04:48:19
沒錯,類似的問題。在詢問之前先看過,但沒有很好的答案。 – uvesten 2011-04-07 08:47:40
因爲你不能改變'setResult(int)'的實現,因此必須相信它的工作原理,那麼僅僅驗證在你的方法中調用方法是不夠的當前的活動? – 2017-12-12 20:27:30