android – 如何使用google-api-client对活动进行单元测试

我正在开发一个 Android应用程序,我想知道如何使用Googleapiclient对活动或服务进行单元测试.

例如,如果GooglePlayService可用,如果它不可用,如何测试活动或服务?我正在考虑使用Mockito,但由于Googleapiclient是从Activity内部实例化的,因此无法模拟它(AFAIK).

public class MyService extends Service {
...
private Googleapiclient googleapiclient;
...
@Override
public void onCreate() {
    ...
    googleapiclient = new Googleapiclient.Builder(this) ... .build();
    ...
}
...
private void doSomething() {
    if(googleapiclient.isConnected) {
        ...
    }
}

此外,我已经读过,不应该嘲笑第三方库,因为如果更新库我的测试套件不会失败,但我怎么办呢?

PS:我确定之前已经问过这个问题,但我找不到好的关键词:/

解决方法

你需要嘲笑.但…

(…) since Googleapiclient is instantiated from inside the Activity

正如您已经观察到的那样,这违背了嘲弄的目的,并且是一个潜在的改进点.实例化外部服务应该通过factory(可以很容易地模拟)或通过dependency injection container进行,然后传递给类(这也可以轻易地模拟).

Further more,I’ve read that mocking a third party library shouldn’t be done because my test suite won’t fail if the library is updated but how can I do otherwise ?

这是一个相当奇怪的说法.您将(至少应该)进行集成测试,以进行更广泛的组件测试,其中将使用实际的第三方库.在单元测试中,您可以模拟依赖项(任何依赖项),以便单独测试并专注于单元.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...