Robolectric 与第三方库

Robolectric with third party libraries

我的项目包括几个第三方库,如 crashlytics、facebook sdk 等。其中一些需要在 activity 启动时进行初始化,但是在 gradle 单元测试下它会失败,如何避免这种情况?模拟或使用运行时标志来绕过它?

两种方法都可以,但在我看来,模拟更好。对于静态方法,您还需要将它们包装在非静态上下文中,这样 Mockito 才能发挥其魔力。此外,您现在可以对日志进行断言。

Crashlytics,您将使用 Logger 接口实例包装:

public interface Logger {

    void setup(Context context);

....

}

包装器本身会调用静态上下文:

public class CrashlyticsLogger implements Logger {

    @Override
    public void setup(Context context) {
        Fabric.with(context, new Crashlytics());
    }

...

}