首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Robolectric 3.3.2 Facebook 4.3及更高版本的兼容性问题

Robolectric 3.3.2 Facebook 4.3及更高版本的兼容性问题
EN

Stack Overflow用户
提问于 2017-05-03 18:25:18
回答 1查看 417关注 0票数 0

我在使用特定版本的Robolectric和Facebook运行单元测试时遇到了问题。当我满足以下条件时,我的测试脚本才能工作

代码语言:javascript
复制
testCompile "org.robolectric:robolectric:3.3.2"
testCompile "org.robolectric:shadows-multidex:3.3.2"
testCompile 'org.robolectric:shadows-support-v4:3.3.2'

代码语言:javascript
复制
compile 'com.facebook.android:facebook-android-sdk:4.2.0'

但是,当我升级到

代码语言:javascript
复制
compile 'com.facebook.android:facebook-android-sdk:4.22.0'

我得到了以下问题:

代码语言:javascript
复制
WARNING: unknown service appops
WARNING: no system properties value for persist.radio.multisim.config

The Facebook sdk must be initialized before calling activateApp

    at com.facebook.appevents.AppEventsLogger.activateApp(AppEventsLogger.java:226)
    at com.facebook.appevents.AppEventsLogger.activateApp(AppEventsLogger.java:208)
    at ladenzeile.android.services.tracking.TrackingService.trackActivateApp(TrackingService.java:129)
    at ladenzeile.android.new_app.NewHome.activity.AppCompatAbstractBaseActivity.onResume(AppCompatAbstractBaseActivity.java:328)
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1257)
    at android.app.Activity.performResume(Activity.java:6076)
    at org.robolectric.util.ReflectionHelpers$6.run(ReflectionHelpers.java:198)
    at org.robolectric.util.ReflectionHelpers.traverseClassHierarchy(ReflectionHelpers.java:341)
    at org.robolectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:192)
    at org.robolectric.android.controller.ComponentController$1.run(ComponentController.java:75)
    at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:362)
    at org.robolectric.shadows.CoreShadowsAdapter$2.runPaused(CoreShadowsAdapter.java:40)
    at org.robolectric.android.controller.ComponentController.invokeWhilePaused(ComponentController.java:72)
    at org.robolectric.android.controller.ActivityController.resume(ActivityController.java:171)
    at org.robolectric.android.controller.ActivityController.setup(ActivityController.java:245)
    at org.robolectric.Robolectric.setupActivity(Robolectric.java:97)
    at ladenzeile.android.new_app.newPreference.RegionPreferenceInteractorTest.saveLanguageAndCountryCode(RegionPreferenceInteractorTest.java:38)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.robolectric.RobolectricTestRunner$HelperTestRunner$1.evaluate(RobolectricTestRunner.java:488)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.robolectric.internal.SandboxTestRunner$2.evaluate(SandboxTestRunner.java:209)
    at org.robolectric.internal.SandboxTestRunner.runChild(SandboxTestRunner.java:109)
    at org.robolectric.internal.SandboxTestRunner.runChild(SandboxTestRunner.java:36)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.robolectric.internal.SandboxTestRunner$1.evaluate(SandboxTestRunner.java:63)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)


Process finished with exit code 255

你知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-02-07 00:26:25

从4.19开始,Facebook SDK会自动初始化进程。Robolectric不能正确启动它,因此导致崩溃。

如果你不需要初始化Facebook SDK,一个完美有效的解决方案就是隐藏activateApp调用。创建此类:

代码语言:javascript
复制
@Implements(AppEventsLogger.class)
public class ShadowAppEventsLogger {
    @Implementation
    public static void activateApp(Application application) {
        // Do nothing, just shadow
    }
}

并将其附加到您的测试:

代码语言:javascript
复制
@Config(shadows = {ShadowAppEventsLogger.class, ...}, ... )
@Test public void fooTest() {...}

参考:http://robolectric.org/extending/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43757424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档