ShadowApplication:已注册的接收器包含未测试的未初始化对象

时间:2014-03-20 11:07:22

标签: android broadcastreceiver robolectric

首先,我得到了我的班级的间谍实例:

TestedClass testedClass = spy(new TestedClass(Robolectric.buildActivity(Activity.class).create().get());

然后,测试类发生了一些变化: testedClass.someString =“不管”

然后,我模拟向在测试类中注册的广播接收器发送意图:

    ShadowApplication shadowApplication = Robolectric.getShadowApplication();
    Intent intent = new Intent(ConnectivityManager.CONNECTIVITY_ACTION);
    List<BroadcastReceiver> broadcastReceivers = shadowApplication.getReceiversForIntent(intent);
    broadcastReceivers.get(0).onReceive(Robolectric.application, intent);

在列表中找到BroadcastReceiver,因此我可以调用onReceive和onReceive事件:

public void onReceive(Context context, Intent intent) {
   Log.i(tag, someString);
}

但是,出现的TestedClass对象是未初始化的版本,它是:someString == "" 它与被窥探的物体不同。 也许,这是正常行为,但我希望获得我为测试创建的相同实例,而不是创建并行创建的模拟实例。

1 个答案:

答案 0 :(得分:0)

这取决于您实例BroadcastReceiver的方式。

如果使用默认值对BroadcastReceiver进行实例化,则不会执行对BroadcastReceiver的模拟调用

//Class member myBroadcastReceiver
public BroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();

但是,如果稍后实例化BroadcastReceiver,它可以正常工作:

public myBroadcastReceiver;
public initializeBroadcastReceiver() {
    myBroadcastReceiver = new MyBroadcastReceiver();
}

这些都是事实,尽管如此,我仍然不知道第一种情况是预期行为还是Robolectric的缺陷。