Как написать модульный тест для проверки возврата Observable? - PullRequest
0 голосов
/ 13 июня 2019

У меня есть класс ApiRepository, который будет содержать все мои вызовы API, но в настоящее время только один:

public class RestApiRepository {

private RestClient restClient;

public RestApiRepository(RestClient restClient) {
    this.restClient= restClient;
}


public Observable<AuthResponseEntity> authenticate(String header, AuthRequestEntity requestEntity) {
    return restClient.postAuthObservable(header, requestEntity);
}
}

И интерфейс RestClient выглядит следующим образом:

public interface SrsRestClient {
    @POST(AUTH_URL)
Observable<AuthResponseEntity> postAuthObservable(@Header("Authorization") String authKey, @Body AuthRequestEntity requestEntity);
}

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

Вот мой класс теста:

public class RestApiRepositoryTest {

private RestApiRepository restApiRepository;

@Mock
private RestClient restClient;

@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);
    restApiRepository = Mockito.spy(new RestApiRepository(restClient));
}

@Test
public void test_success() {
    String token = "token";
    AuthRequestEntity requestEntity = new AuthRequestEntity();
    AuthResponseEntity responseEntity = new AuthResponseEntity();
    Mockito.when(restClient.postAuthObservable(token, requestEntity)).thenReturn(Observable.just(responseEntity));

}
}

Я считаю, что тест пройден, но ничего не проверено, верно?Разве этого не будет, когда - тогда возвращения будет достаточно?

1 Ответ

1 голос
/ 14 июня 2019

Лично я бы не сделал хранилище шпионом, поэтому в настройках у меня будет:

@Before
public void setUp() {
   MockitoAnnotations.initMocks(this);
   restApiRepository = new RestApiRepository(restClient);
}

Теперь я бы написал тест как:

@Test
public void test_success() {
  String token = "token";
  AuthRequestEntity requestEntity = new AuthRequestEntity();
  AuthResponseEntity responseEntity = new AuthResponseEntity();
  Mockito.when(restClient.postAuthObservable(token, requestEntity)).thenReturn(Observable.just(responseEntity));

  restApiRepository.authenticate(token, responseEntity)
        .test()
        .assertValue(responseEntity)
 }

Таким образом, вы утверждаете, что наблюдаемое излучает желаемое значение. test - это удобный метод Rx, который подписывается и создает тестового наблюдателя, который позволяет вам утверждать о различных событиях.

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

...