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());
}
...
}
我的项目包括几个第三方库,如 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());
}
...
}