首先,我得到一个被测试类的监视实例:
TestedClass testedClass = spy(new TestedClass(Robolectric.buildActivity(Activity.class).create().get());
然后,测试类发生一些变化:testedClass。someString = "whatever"
然后,我模拟向被测试类中注册的广播接收器发送意图:
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);
}
然而,出现的testdclass对象是一个未初始化的版本,即:someString == ""
这不是被监视的那个物体。也许,这是正常的行为,但我想获得我为测试创建的相同实例,而不是并行创建的模拟实例。
这取决于你实例化BroadcastReceiver的方式。
如果使用默认值实例化BroadcastReceiver,则不会执行对BroadcastReceiver的模拟调用
//Class member myBroadcastReceiver
public BroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
但是,如果稍后实例化BroadcastReceiver,它可以正常工作:
public myBroadcastReceiver;
public initializeBroadcastReceiver() {
myBroadcastReceiver = new MyBroadcastReceiver();
}
这些都是事实,尽管如此,我仍然不知道第一种情况是预期行为还是机器人电气的缺陷。