好的,这是我的问题,
我有一个需要使用身份验证的Android应用。 随着项目的成长,我想在我的应用程序中添加单元测试。
为此,我使用Espresso 2.1
事情是:
LoginActivity
由startActivityForResult
LoginActivity
finish
使用RESULT_OK
。所以在我的 espresso 测试类中,我有一些单元测试。 not ok 的情况一切都很好,问题出在 ok 的情况。
我需要检查结果是否为RESULT_OK
,但随着活动结束,espresso
失败,
android.support.test.espresso.NoActivityResumedException: No activities in stage RESUMED. Did you forget to launch the activity. (test.getActivity() or similar)?
以下是我的问题:
setResult
的{{1}}?我已经阅读了关于Espresso-Intents的内容,但我无法弄清楚如何启动自己的包的活动并检查结果是Activity
。
感谢您的帮助!
答案 0 :(得分:2)
非常简短的回答:
是的,可以通过执行
来设置结果Intent resultData = new Intent();
resultData.setData(...);
Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData);
intending(toPackage("package.containing.login.activity")).respondWith(result);
您将通过检查其中一个视图是否包含所需的返回信息来评估是否收到了RESULT_OK。 如果不够清楚,请在评论中发布任何问题并尝试提供帮助。
我如何开始自己的套餐活动
用户将如何做?可能通过点击按钮或任何其他视图交互,对吧?
答案 1 :(得分:-1)
你真的需要Espresso进行这项测试吗? Robolectric ActivityShadow有getResultCode()和getResultIntent()方法。
final Intent startIntent = new Intent();
final ResultActivity activity = Robolectric.buildActivity(ResultActivity.class)
.withIntent(startIntent)
.create()
.get();
final String data = "data";
activity.onEventMainThread(new CompletedEvent(data));
assertEquals(RESULT_OK, shadowOf(activity).getResultCode());
final Intent resultIntent = shadowOf(activity).getResultIntent();
assertEquals(data, resultIntent.getStringExtra(DATA_KEY));
ResultActivity设置结果并在收到CompletedEvent后结束。在此测试中,直接调用事件处理程序来模拟事件。