Java 使用robolectric my expectedIntent在不应';不可能
我有以下活动:Java 使用robolectric my expectedIntent在不应';不可能,java,android,unit-testing,robolectric,Java,Android,Unit Testing,Robolectric,我有以下活动: public class WelcomeActivity extends ActivityBase { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
public class WelcomeActivity extends ActivityBase {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.welcome);
final OnClickListener Click = new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(WelcomeActivity.this, WelcomeDoneActivity.class);
startActivityForResult(intent, 0);
setResult(RESULT_OK);
finish();
}
};
((TitleBar)findViewById(R.id.theTitleBar)).setOnClickCloseListener(Click);
}
这个测试:
@Test
public void clickingLogin_shouldStartLoginActivity() {
WelcomeActivity activity = Robolectric.setupActivity(WelcomeActivity.class);
activity.findViewById(R.id.theTitleBar).performClick();
Intent expectedIntent = new Intent(activity, WelcomeDoneActivity.class);
assertThat(shadowOf(activity).getNextStartedActivity(), equalTo(expectedIntent));
}
为什么会出现断言错误
java.lang.AssertionError:
Expected: <Intent { cmp=com.w/.profile.WelcomeDoneActivity }>
but: was null
更改:
shadowOf(activity).getNextStartedActivity()
致:
在您发布的代码中,您正在通过
setOnClickCloseListener
在标题栏上设置onClick。
看起来您的标题栏
是一个自定义视图,我认为setOnClickCloseListener
意味着标题栏上有一个“关闭”按钮或视图,应该调用performClick(),而不是标题栏本身,以便Robolectric按照您期望的方式运行
如果不知道标题栏
和设置ClickCloseListener
的实现,很难判断,但是:
1)如果您只想单击标题栏启动新活动,
然后将setOnClickCloseListener
更改为setOnClickListener
或
2) 如果标题栏包含关闭按钮/视图的视图(或
setOnClickCloseListener
!“ClickClose”中所指的任何内容),深入标题栏布局以查找此视图的ID,并调用performClick,它应该可以解决您的问题。您得到的是调用新活动的现有活动的意图,而不是具有您意图的新活动。你需要获得新的活动,并拿出这个意图。你将如何做到这一点?我用新代码更新了我的q,但新代码不起作用。对于'ShadowActivity.IntentForResult-nextStartedActivityForResult=shadowOf(activity)。getNextStartedActivityForResult()我得到nextStartedActivityForResult==null
`你会如何断言它?所以它不起作用。你确定你的侦听器代码被调用了吗?我可以添加一个日志,但这应该可以正常工作。否activity.findviewbyd(R.id.theTitleBar.performClick()`应该是,除非它被移到某个地方
shadowOf(activity).getNextStartedActivity()
shadowOf(activity).getNextStartedActivityForResult()