Модульный тест Android с использованием синхронного вызова дооснащения 2 - PullRequest
0 голосов
/ 28 июня 2018

Я занимаюсь разработкой приложения, основанного на чистой архитектуре, для которого я использую Dagger 2, rxJava, retrofit 2 и realm. Я вызываю сервисы синхронно на удаленном уровне и асинхронно в презентации с использованием rxJava, приложение теперь работает, теперь я хочу реализовать модульные тесты, чтобы получить отчет о покрытии кода, тесты Unitarians для локального уровня уже есть У меня проблемы с выполнением модульных тестов на уровне, где я вызываю сервисы с модернизацией. Как могут модульные тесты для этого случая?

Структура проекта

Позвоните в сервис с переоборудованием

RestApi.java

Код модульного теста, это будет хорошо, в ответе MockWebServer я создаю json с двумя значениями, но вызываю метод вызова веб-службы 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;
}

}

Результат теста

1 Ответ

0 голосов
/ 03 июля 2018

Через некоторое время я понял, что MockWebServe вызывает другой URL, здесь я оставляю вам, как решить проблему.

public class CloudAppRepositoryUnitTest {
private AppEntityRemoteMapper appEntityRemoteMapper;
private CloudAppRepository cloudAppRepository;
private MockWebServer mockWebServer;

@Before
public void setUp() throws Exception {
    mockWebServer = new MockWebServer();
    ApplicationEntity applicationEntityResponse = createApplicationEntity();
    String response = new Gson().toJson(applicationEntityResponse);
    MockResponse mockResponse = new MockResponse().setResponseCode(200)
            .setBody(response);
    mockWebServer.enqueue(mockResponse);
    mockWebServer.start();
    OkHttpClient client = new OkHttpClient.Builder().build();
    Retrofit retrofit = new Retrofit.Builder()
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .baseUrl(mockWebServer.url("/"))
            .client(client)
            .build();
    RestApi restApi = retrofit.create(RestApi.class);
    appEntityRemoteMapper = new AppEntityRemoteMapper();
    cloudAppRepository = new CloudAppRepository(restApi, appEntityRemoteMapper);
}

@After
public void tearDown() throws Exception {
    this.mockWebServer.shutdown();
}

@Test
public void testGetApps() throws Exception {
    List<App> appList = cloudAppRepository.getApps();
    assertThat(appList, CoreMatchers.notNullValue());
    assertThat(appList.size(), is(2));
    assertThat(appList.get(0), is(instanceOf(App.class)));
    assertThat(appList.get(0).getId(), is(1));
    assertThat(appList.get(0).getName(), is("Mi Claro App"));
    assertThat(appList.get(0).getTopic(), is("miclaroapp"));
    assertThat(appList.get(0).getDescription(), is("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua."));
}

@Test
public void testSubscriberApp() throws Exception {
    /*List<App> appList = createAppList();
    boolean response = cloudAppRepository.subscriberApp(appList);
    assertThat(response, is(true));*/
}

private List<App> createAppList() {
    List<App> appList = new ArrayList<>();
    appList.add(new App(1, "Mi Claro App", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.",
            true, "miclaroapp"));
    appList.add(new App(2, "Mi Claro Web", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.",
            false, "miclaroweb"));
    return appList;
}

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 Claro Web", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.",
            true, "miclaroweb"));
    return appListResponse;
}

private Status createStatus() {
    Status status = new Status();
    status.setCode(1);
    status.setMessage("correct");
    return status;
}

}

...