android – Robolectric测试活动创建包括意图附加功能

我有一个活动,将从额外的东西中获取一个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()行中,我一直得到一个空指针,我假设我用意图模拟活动的过程是不正确的.

有人可以帮忙吗?

谢谢

解决方法:

我自己就是这样做的.在调用onCreate()之前,您似乎需要使用shadowActivity来操作Intent.

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

似乎操纵活动本身应该做的伎俩,但事实并非如此.比我聪明的人必须解释为什么这是 – 或者只是比我更聪明的人告诉你上面的错误.

快速记录.由于Robolectric似乎使用javassist来操纵分类的阴影,因此在第一次加载类之前进行类绑定非常重要.我按照他们的建议在Runner中进行绑定.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...