Robolectric测试活动创建,包括意图附加信息

4

我有一个活动,会从extras中获取一个pojo,就像这样:

@Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Bundle extras = getIntent().getExtras();
        if (extras != null)
        {
            MyPojo pojo = extras.getParcelable("pojo");
            // do stuff with my pojo here
            }
        }
        // button that shows a toast message
    }

我在使用Robolectric进行测试时遇到了困难,我认为我需要使用ShadowIntents和ShadowActivities的组合,但是文档有点薄弱,而且关于这个特定场景的有用教程非常稀少。

目前,我已经想出了以下解决方案:

@Test
    public void assertClickingTagSightingDisplaysToast()
    {
        myActivity = new MyActivity();
        myActivity.onCreate(null);
        ShadowActivity shadowMyActivity = shadowOf(myActivity);
        shadowMyActivity.setIntent(new Intent().putExtra("pojo", generateAPojo()));


        ShadowButton shadowButton = (ShadowButton) shadowOf(shadowMyActivity.findViewById(R.id.myButton));
        shadowButton.performClick();

        assertThat(ShadowToast.getTextOfLatestToast(), equalTo("Button was clicked!"));
    }

当我执行这些测试时,我一直收到一个空指针异常,在我的活动中的getIntent().getExtras()代码行,我认为我模拟意图活动的过程是不正确的。

有人可以帮忙吗?

谢谢

1个回答

5

我自己也遇到了这个问题。似乎你需要在调用onCreate()之前使用shadowActivity来操作Intent。

Robolectric.shadowOf(activity).setIntent(intent);

似乎直接操纵活动本身就能解决问题,但实际上并不行。需要有某个比我聪明的人来解释为什么会这样 -- 或者只需要有稍微比我聪明一点的人告诉你上面的内容是错误的。

-- 快速提醒。由于Robolectric似乎使用javassist来操作影子类,因此在第一次加载类之前进行类绑定非常重要。我遵循了他们在Runner中进行绑定的建议。


仍然没有答案 :) - Asqan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接