4

我有一项活动可以从临时演员中获得一个 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()我的活动行中,我假设我用意图模拟活动的过程是不正确的。

有人可以帮忙吗?

谢谢

4

1 回答 1

5

我自己打了这个东西。在调用 onCreate() 之前,您似乎需要使用 shadowActivity 来操作 Intent

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

似乎操纵活动本身应该可以解决问题,但事实并非如此。比我聪明的人将不得不解释为什么会这样——或者比我聪明一点的人会告诉你以上是错误的。

——速记。由于 Robolectric 似乎正在使用 javassist 来操作影子分类,因此在第一次加载类之前进行类绑定很重要。我按照他们的建议在 Runner 中进行绑定。

于 2012-06-04T14:55:00.143 回答