sai*_*men 8 android unit-testing mocking retrofit2
我对测试和 TDD 非常陌生,我决定使用 Retrofit2-Mock 来满足我的 api 模拟需求。Mock Retrofit2 的文档几乎不存在,我找到的唯一操作方法资源是2015 年的这篇文章和2016年的这个答案。
在这些中使用了一个 BehaviorDelegate 类,它没有实现模拟的 api 接口并且需要被包装。
有没有更优雅的方式来获取模拟 api 服务?
或者我是否错过了整点并且 Retrofit2-Mock 工具不被认为在“最佳实践堆栈”中?专业,因为关于它的文章太少了
Retrofit 的 Github 存储库上的这个问题询问您所询问的不存在的文档(在撰写此答案时它仍然处于打开状态)。
好吧,你有 2 个选择(都在你已经提到的文章中),这取决于你想如何定义你的Gives/Inputs:
如果您通常通过处理后端的 json响应(使用Postman之类的东西)来启动 TDD,并且如果您直接使用返回的 json 作为测试的输入,那么您会更有信心MockWebServer,然后使用,您将在其中复制/粘贴您已经拥有了 package.json 并从那里开始开发您的测试。
如果您更喜欢使用代码中已使用的模型的对象来定义给定/输入,这将使您的测试更具可读性和可控性,那么使用 Retrofit 的模拟 Web 服务器,就像@JakeWharton提到的官方示例中的使用方式一样
这两个选项都是由Square的同样出色的人开发/维护的,所以这实际上是关于你想要如何定义你的给定/输入。
我通常像这样使用 Mockito
导入改造模拟
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit-mock</artifactId>
<version>${version.retrofit}</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)创建和使用模拟
import retrofit2.mock.Calls;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.mock;
...
Api api = mock(Api.class); // Mockito mock
...
when(api.doSomething(param)).thenReturn(Calls.response(response));
Run Code Online (Sandbox Code Playgroud)Retrofit Mock 仅用于生成响应。
| 归档时间: |
|
| 查看次数: |
4673 次 |
| 最近记录: |