Robolectric和GoogleCloudMessaging

中间树桩

是否可以借助robolectric对GCM上游消息进行单元测试?这是我的单位:

public void sendUpstream(Bundle data)
{
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
    String id = "trv2" + System.currentTimeMillis();
    try {
            gcm.send(GCM_SENDER_ID + "@gcm.googleapis.com", id, data);
    } catch (IOException e) {
        printStackTrace(e);
    }
}

尝试使用robolectric对其进行测试会产生以下堆栈跟踪:

java.lang.NullPointerException
    at com.google.android.gms.gcm.GoogleCloudMessaging.zza(Unknown Source)
    at com.google.android.gms.gcm.GoogleCloudMessaging.send(Unknown Source)
   at com.google.android.gms.gcm.GoogleCloudMessaging.send(Unknown Source)

这似乎告诉我,robolectric而不是使用影子类,而是直接尝试使用GoogleCloudMessaging该类而失败,因为该测试未在设备上执行。

我尝试创建一个影子GoogleCloudMessaging类,以查看是否可行。这就是阴影:

@Implements(GoogleCloudMessaging.class)
public class ShadowGCM {

    Bundle data;
    String to;
    String msgId;

    public ShadowGCM() {}

    @Implementation
    public void send(String to, String msgId, Bundle data) {
        this.data = data;
        this.to = to;
        this.msgId = msgId;
    }
}

以下注释已添加到我的测试类中,以使其正常工作。

@RunWith(MyTestRunner.class)
@Config(manifest = "src/main/AndroidManifest.xml", shadows =     {ShadowGCM.class } ,
    constants = BuildConfig.class, sdk = Build.VERSION_CODES.KITKAT)

MyTestRunner是我创建的自定义测试运行程序,因为仅将'shadows'属性放入配置注释中似乎无效。这是测试跑步者。

public class MyTestRunner extends RobolectricGradleTestRunner {

    public MyTestRunner(Class<?> klass) throws InitializationError {
        super(klass);

    }


    @Override
    public InstrumentationConfiguration createClassLoaderConfig() {
        InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder();
        builder.addInstrumentedClass(ShadowGCM.class.getName());
        builder.addInstrumentedClass(ShadowInstanceID.class.getName());

        return builder.build();
    }
}

但经过所有这些工作。NullPointerException仍然存在。Roboelectric看起来不像在使用我的影子类。

内尼克

小错误...该行builder.addInstrumentedClass( .. );指定了可能被遮盖的类。此时,请使用GoogleCloudMessaging而不是ShadowGCM。

该部分manifest = "src/main/AndroidManifest.xml"可能会在以后给您带来麻烦。相反,您应该从RobolectricGradleTestRunner已经完成的构建目录中获取清单。如果您在AndroidStudio中遇到问题,请阅读http://robolectric.org/getting-started/上的“ Linux和Mac用户注意事项”

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Robolectric和GoogleCloudMessaging

来自分类Dev

Robolectric和FragmentTestUtil

来自分类Dev

GoogleCloudMessaging捆绑包和比较字符串

来自分类Dev

Robolectric样本和Gradle插件

来自分类Dev

让Mockito与RoboGuice和Robolectric合作

来自分类Dev

Robolectric和改造-等待响应

来自分类Dev

Robolectric的影子对象和模拟

来自分类Dev

用SugarORM和Robolectric测试

来自分类Dev

Robolectric样本和Gradle插件

来自分类Dev

Robolectric和Google Analytics(分析)错误

来自分类Dev

Robolectric 2.2和ActionBarSherlock 4.2.0的问题

来自分类Dev

Robolectric和Google Analytics(分析)错误

来自分类Dev

使用Robolectric和Dagger进行Android测试

来自分类Dev

Robolectric 2.4和android.util.Log

来自分类Dev

Robolectric和外部广口瓶

来自分类Dev

Robolectric 和 Evernotes android-job 库

来自分类Dev

测试驱动开发:: AndroidStudio + Robolectric(无法解决junit和Robolectric导入的符号错误)

来自分类Dev

测试驱动开发:: AndroidStudio + Robolectric(无法解决junit和Robolectric导入的符号错误)

来自分类Dev

gcm GoogleCloudMessaging新的实现

来自分类Dev

gcm GoogleCloudMessaging新的实现

来自分类Dev

Robolectric 2.0和RoboGuice 2.0集成

来自分类Dev

无法解决工件:使用Eclipse和Robolectric丢失

来自分类Dev

Robolectric和Android Studio 1.1.0以及库测试

来自分类Dev

带有ADT23和Android 15的Robolectric的NoClassDefFoundError

来自分类Dev

GoogleCloudMessaging没有播放服务

来自分类Dev

我找不到GoogleCloudMessaging类

来自分类Dev

GoogleCloudMessaging没有播放服务

来自分类Dev

如何在Robolectric中对RecyclerView和LinearLayoutManager进行单元测试?

来自分类Dev

如何在Android中使用Dagger2依赖注入和Robolectric进行测试?

Related 相关文章

热门标签

归档