如何使用 Google Drive API(Java 客户端)对应用程序进行单元测试
Posted
技术标签:
【中文标题】如何使用 Google Drive API(Java 客户端)对应用程序进行单元测试【英文标题】:How to unit test an application using Google Drive API (Java client) 【发布时间】:2012-11-18 19:10:46 【问题描述】:使用Google Drive API (Java client) 对应用程序进行单元测试的最佳方法是什么?
似乎编写的应用程序严重依赖 Drive
类,但两者都没有......
...如何测试这样的应用程序?
使用像 Mockito 这样的模拟框架对 Drive API(Java 客户端)来说有点乏味,因为 Drive Java 客户端的使用依赖于进行如此多的链式调用(例如,来自文档):
Drive service = getDriveService(req, resp);
service.files().get(fileId).execute();
【问题讨论】:
我想说你最好在这种情况下进行集成测试,因为你不能轻易地模拟库。 【参考方案1】:事实上,在深度存根的帮助下,在 Mockito 中它不应该那么乏味:
Drive mockDrive = mock(Drive.class, RETURNS_DEEP_STUBS);
....
// stubbing
when(service.files().get(anyString()).execute()).thenReturn(something);
// verify
verify(service.files().get("Some Field ID").execute();
通过documentation of Mockito了解更多信息
如果您编写集成测试来测试实际的 Drive 服务也可以,但它根本无法替代单元测试。
【讨论】:
+1 如果我想在晚上睡得很香,我会进行单元测试和集成测试。 仍然无法让它工作,因为我得到了ClassCastException (org.mockito.internal.creation.jmock.ClassImposterizer$ClassWithSuperclassToWorkAroundCglibBug$$EnhancerByMockitoWithCGLIB$$4603175d cannot be cast to java.lang.Void)
。但是,我认为您的答案实际上是正确的,而我看到的错误是 Mockito 中的错误。谢谢!
@JonathanNewmuis 我遇到了同样的问题。你找到解决方案了吗?
@Jeffrey 我已经有一段时间没有从事这个项目了,但是不,我认为我没有找到解决方案。
@JonathanNewmuis 我昨天发现了问题:Mockito 对泛型不是很聪明。 execute()
返回T
。 Mockito 不解析类型变量,因此它模拟 Object
而不是真正的类。你可以使用 Guava TypeToken
写一个新的Answer
来解决这个问题,但是有点乱。以上是关于如何使用 Google Drive API(Java 客户端)对应用程序进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 如何使用 Google Drive API 下载公共文件
如何通过 API 向 Google Drive 添加/创建/插入文件?
如何从 Google Drive 上传和下载文件(使用 Rest Api v3)