2

以下に示す方法を使用して、テストしているアクティビティが別のアクティビティを開始するかどうかを検証しています。

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

ドキュメントによると、ブロック パラメーターは、モニターがアクティビティの開始をブロックするかどうかを制御します (既定の結果を返します)。そして、これが私が達成したいことです - 私は AcitivityResult をアクティビティの呼び出しに戻したいです: 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);

私が正しく理解していれば、addMonitor() に「true」を渡すと、開始がブロックされ、呼び出しアクティビティがモックされた結果を受け取るはずです。それは起こっていません。要求されたアクティビティが正常に開始され、エミュレーターに表示されます。結果は呼び出しアクティビティに返されません。誰もそれで同様の問題を抱えていましたか?

4

2 に答える 2

2

Solo は、すべてのインテントをキャッチする内部の ActivityMonitor を使用し、一致する最初のモニターのみがヒットするため、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);
于 2013-06-19T14:42:15.800 に答える
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();
于 2012-06-27T19:58:36.060 に答える