我在我的android项目上运行robolectric单元测试。
我的环境是: robolectric 2.3和android.jar的版本是19
当我在测试用例中启动一个活动时,我得到了nullPointetException。 跟踪我的代码后,我发现它是由sendOrderBroadcast引起的。 因为ShadowContextWrapper没有实现sendOrderBroadcast(...)。
this.activity = Robolectric.buildActivity(myActivity.class).create().get();
为了解决这个问题,我通过扩展ShadowContextWrapper在我的contextWrapper阴影中实现了这个函数。
@Implements(ContextWrapper.class)
public class myShadowContextWrapper extends ShadowContextWrapper {
@Implementation
public void sendOrderedBroadcast( Intent intent, String receiverPermissions ){
getApplicationContext().sendBroadcast(intent);
}
@Implementation
public void sendOrderedBroadcast (Intent intent, String receiverPermission, BroadcastReceiver resultReceiver,
Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
getApplicationContext().sendBroadcast(intent);
}
}
我收到了另一条错误消息。
java.lang.RuntimeException:java.lang.IllegalArgumentException:
试图调用public void com.example.myShadowContextWrapper.sendOrderedBroadcast (android.content.Intent,java.lang.String中,android.content.BroadcastReceiver,android.os.Handler,INT,java.lang.String中,android.os.Bundle) 在类org.robolectric.shadows.ShadowApplication的实例上,但是 ShadowApplication不会扩展myShadowContextWrapper
似乎robolectric并没有将shadowContextWrapper替换为myShadowContextWrapper,因此shadowApplication仍然继承到shadowContextWrapper。
我也尝试实施" myShadowApplication"并扩展我的myShadowContextWrapper, 但错误消息显示myShadowApplication无法转换为ShadowApplication。
在Java中同时继承ShadowApplication和myShadowContextWrapper是不可能的。