我可以在robolectric中创建自定义阴影ContextWrapper吗?

时间:2014-09-26 09:27:05

标签: java android nullpointerexception robolectric

我在我的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是不可能的。

0 个答案:

没有答案