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

Android ShadowApplication:注册的接收器包含未初始化的测试对象,android,broadcastreceiver,robolectric,Android,Broadcastreceiver,Robolectric,首先,我得到一个正在测试的类的间谍实例: TestedClass testedClass = spy(new TestedClass(Robolectric.buildActivity(Activity.class).create().get()); 然后,被测试的类会发生一些变化: testedClass.someString=“无论什么” 然后,我模拟向在测试类中注册的广播接收器发送意图: ShadowApplication shadowApplication = Robolect

首先,我得到一个正在测试的类的间谍实例:

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);
但是,出现的TestedClass对象是未初始化的版本,这是:
someString==”
这不是被监视的同一个物体。
也许,这是正常的行为,但我希望得到与我为测试创建的实例相同的实例,而不是并行创建的模拟实例。

这取决于您对BroadcastReceiver进行实例化的方式

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

//Class member myBroadcastReceiver
public BroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
但是,如果稍后实例化BroadcastReceiver,它将正常工作:

public myBroadcastReceiver;
public initializeBroadcastReceiver() {
    myBroadcastReceiver = new MyBroadcastReceiver();
}
这些都是事实,尽管如此,我仍然不知道第一个案例是预期行为还是机器人分子的缺陷

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