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

时间:2014-12-18 19:21:20

标签: android unit-testing google-api-client

我正在开发一款Android应用,我想知道如何使用 GoogleApiClient Activity Service 进行单元测试。

例如,在 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:我确定之前已经问过这个问题,但我找不到好的关键字:/

1 个答案:

答案 0 :(得分:1)

你需要嘲笑。但...

  

(...)因为GoogleApiClient是从Activity

中实例化的

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

  

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

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