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()