Robolectric允许使用Activity
测试shadowOf(activity).peekNextStartedActivity()
是否已启动。但是,如果Activity
以FLAG_ACTIVITY_CLEAR_TOP
启动,则此方法似乎无效。这是直观的,因为此标志的目的不是启动新的Activity
,而是将后备堆栈中的现有Activity
放在前面。有没有办法测试这种情况?
更新
我的测试场景如下:
涉及3个活动,让他们称他们为A,B和C.测试中的活动是B,由A.开始.B现在开始C得到结果,当收到结果时回到A使用FLAG_ACTIVITY_CLEAR_TOP
标志。即使当时堆栈中没有活动A,我也希望它能够启动并通过peekNextStartedActivity()
提供。
答案 0 :(得分:4)
每当您从活动发送意图时(例如),您都可以使用set flags方法:
Intent i = new Intent(MyActivity.this, SomeActivity.class);
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP | SOME_OTHER_FLAGS...);
startActivity(i);
关于结果活动(示例中的SomeActivity),您可以使用getIntent方法:
getIntent().getFlags()
所以真正的问题是:如何将标志拆分为基本组件(按位OR)
基于这篇文章:http://code.tutsplus.com/articles/understanding-bitwise-operators--active-11301
只需使用您需要的组件检查标志
if ((getIntent().getFlags() & FLAG_ACTIVITY_CLEAR_TOP) != 0)
{
// do something here
}
答案 1 :(得分:0)
我试过测试:
private void checkMainActivityIsStarted()
{
activity.showMainActivity();
Intent intent = shadowOf( activity ).getNextStartedActivity();
assertThat( intent ).hasComponent( Robolectric.application, MainActivity.class );
assertThat( intent.getFlags() ).isEqualTo( Intent.FLAG_ACTIVITY_CLEAR_TOP );
}
下一个代码:
public void showMainActivity()
{
Intent intent = new Intent( this, MainActivity.class );
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
startActivity( intent );
}
它对你有用吗?
<强>更新强>
至于我,你应该把这个测试分成两部分:
onActivityResult
时,活动B(它是公共方法)会触发活动A 至于我,没有必要在活动之间测试Android传递意图。如果我理解错误,请纠正我。
答案 2 :(得分:0)
它绝对可以解决您的问题。
Intent i = new Intent(MyActivity.this, SomeActivity.class);
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP | SOME_OTHER_FLAGS...);
startActivity(i);
但是如果你可以在B到C的意图时完成你当前的活动,当它显示结果和完成C活动时,它将带你进入A屏幕。