【发布时间】:2018-06-27 23:56:15
【问题描述】:
我正在开发一个基于干净架构的应用程序,为此我使用 Dagger 2、rxJava、retrofit 2 和 realm。我在远程层同步调用服务,并在演示文稿中使用 rxJava 异步调用,应用程序现在正在运行,现在我想实现单元测试以报告代码覆盖率,本地层的测试 Unitarians 已经存在,我在对调用服务的层进行单元测试时遇到问题,如何针对这种情况进行单元测试?
单元测试代码,这会很好,在 MockWebServer 响应中,我正在创建一个具有两个值的 json,但调用了调用 web 服务 List appList = cloudAppRepository.getApps (); 的方法;它返回一个没有记录的列表
public class CloudAppRepositoryUnitTest {
@Mock
private RestApi restApi;
@Mock
private AppEntityRemoteMapper appEntityRemoteMapper;
private CloudAppRepository cloudAppRepository;
private MockWebServer mockWebServer;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
mockWebServer = new MockWebServer();
mockWebServer.start();
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(mockWebServer.url("/"))
.build();
restApi = retrofit.create(RestApi.class);
cloudAppRepository = new CloudAppRepository(restApi, appEntityRemoteMapper);
}
@After
public void tearDown() throws Exception {
this.mockWebServer.shutdown();
}
@Test
public void testGetApps() throws Exception {
ApplicationEntity applicationEntityResponse = createApplicationEntity();
mockWebServer.enqueue(new MockResponse().setResponseCode(200).setBody(new Gson().toJson(applicationEntityResponse)));
List<App> appList = cloudAppRepository.getApps();
assertThat(appList, CoreMatchers.notNullValue());
assertThat(appList.size(), is(2));
assertThat(appList.size(), is(0));
}
private ApplicationEntity createApplicationEntity() {
ApplicationEntity applicationEntity = new ApplicationEntity();
applicationEntity.setStatus(createStatus());
applicationEntity.setAppEntities(createListAppEntity());
return applicationEntity;
}
private List<AppEntity> createListAppEntity() {
List<AppEntity> appListResponse = new ArrayList<>();
appListResponse.add(new AppEntity(1, "Mi Claro App", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.",
true, "miclaroapp"));
appListResponse.add(new AppEntity(2, "Mi app", "description",
true, "topic1"));
return appListResponse;
}
private Status createStatus() {
Status status = new Status();
status.setCode(1);
status.setMessage("correct");
return status;
}
}
【问题讨论】:
标签: android unit-testing retrofit2 mockwebserver