android – Robolectric与新版Google Play服务的问题

android – Robolectric与新版Google Play服务的问题,第1张

概述我使用Robolectric进行单元测试,我的项目中有Google Play服务.直到昨天,当Google Play服务更新为新版本时,此工作正常.我收到此错误: java.lang.NullPointerExceptionat com.google.android.gms.common.GooglePlayServicesUtil.zzh(Unknown Source)at com.goog 我使用Robolectric进行单元测试,我的项目中有Google Play服务.直到昨天,当Google Play服务更新为新版本时,此工作正常.我收到此错误:
java.lang.NullPointerExceptionat com.Google.androID.gms.common.GooglePlayServicesUtil.zzh(UnkNown Source)at com.Google.androID.gms.common.GooglePlayServicesUtil.zzd(UnkNown Source)at com.Google.androID.gms.common.GoogleAPIAvailability.isGooglePlayServicesAvailable(UnkNown Source)at com.Google.androID.gms.common.API.zzg$zze.zznn(UnkNown Source)at com.Google.androID.gms.common.API.zzg$zzi.run(UnkNown Source)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Process finished with exit code 255

似乎没有调用Shadow类,调用GooglePlayServicesUtil给出NullPointerException.有没有人见过这个?

我甚至不在测试中使用Google Play服务.

解决方法 我添加了下一个解决方法,它工作正常:

>将所有PlayServices的相关代码解压缩到Utility类(在我的例子中,它只是可用性检查):

public class PlayServicesUtils {    private static final int PLAY_SERVICES_RESolUTION_REQUEST = 9000;    public static final int AVAILABLE = 1;    public static final int ERROR_RESolVABLE = 2;    public static final int ERROR_UNRESolVABLE = 3;    @IntDef({AVAILABLE,ERROR_RESolVABLE,ERROR_UNRESolVABLE})    @Retention(RetentionPolicy.soURCE)    public @interface PlayServicesAvailability {    }    @PlayServicesAvailability    public static int checkPlayServices(@NonNull Activity activity) {        GoogleAPIAvailability APIAvailability = GoogleAPIAvailability.getInstance();        int resultCode = APIAvailability.isGooglePlayServicesAvailable(activity);        if (resultCode != ConnectionResult.SUCCESS) {            if (APIAvailability.isUserResolvableError(resultCode)) {                APIAvailability.getErrorDialog(activity,resultCode,PLAY_SERVICES_RESolUTION_REQUEST).show();                return PlayServicesUtils.ERROR_RESolVABLE;            } else {                CLog.e(Constants.TAG,"This device does not support Google Play services.");                return PlayServicesUtils.ERROR_UNRESolVABLE;            }        }        return PlayServicesUtils.AVAILABLE;    }}

>为此Utility类实现阴影:

@Implements(PlayServicesUtils.class)public class ShadowPlayServicesUtils {    @Implementation    @PlayServicesUtils.PlayServicesAvailability    public static int checkPlayServices(@NonNull Activity activity) {        return PlayServicesUtils.AVAILABLE;    }}

>为您的测试类(或基类测试类)添加阴影:

@Ignore@RunWith(TestRunner.class)@Config(        sdk = 18,constants = BuildConfig.class,shadows = {                ShadowPlayServicesUtils.class        })public abstract class BaseTest {    // some code,maybe }

>将您的影子添加到TestRunner的InstrumentationConfiguration创建中:

public class TestRunner extends RobolectricGradleTestRunner {    public TestRunner(Class<?> klass) throws InitializationError {        super(klass);    }    @OverrIDe    public InstrumentationConfiguration createClassLoaderConfig() {        InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder();        builder.addInstrumentedClass(PlayServicesUtils.class.getname());        return builder.build();    }}

原始答案:

我在Robolectric问题跟踪器上找到了similar issue,并在那里提供了解决方法 – 工作!

只需强制成功初始化Google Play服务:

@Before public voID setUp() {    // force success every time    ShadowGooglePlayServicesUtil.setIsGooglePlayServicesAvailable(ConnectionResult.SUCCESS);}

编辑:

但是还有另一个issue Play Services 8.3和8.4.这个问题仍然没有解决.

总结

以上是内存溢出为你收集整理的android – Robolectric与新版Google Play服务的问题全部内容,希望文章能够帮你解决android – Robolectric与新版Google Play服务的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1135221.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存