gpt4 book ai didi

android - Robolectric 和 GoogleCloudMessaging

转载 作者:搜寻专家 更新时间:2023-11-01 08:40:05 24 4
gpt4 key购买 nike

是否可以借助 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 已经完成的构建目录中获取 list 。如果您在 AndroidStudio 中遇到问题,请阅读 http://robolectric.org/getting-started/ 上的“Linux 和 Mac 用户注意事项”

关于android - Robolectric 和 GoogleCloudMessaging,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33589922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com