#java #object #testing #junit
#java #объект #тестирование #junit
Вопрос:
У меня есть класс для анализа ответа json, полученного из запроса API, который был выполнен с использованием фреймворка restlet.
Метод, отвечающий за чтение json, берет объект из этой среды, представление, public QueryResponse readResponse(Representation repr)
, и я хотел бы протестировать функциональность этого
Мой вопрос в том, как мне передать действительный объект представления в этот метод в моем тесте JUnit, учитывая, что я не знаю, как он создается из вызова API, должен ли я реализовать сам вызов в тесте для извлечения работоспособного объекта или есть другой метод?
Комментарии:
1. Ну, если вы не знаете, как создать действительный
Representation
, лучшее, что вы можете сделать, это смоделировать его. Вы знаете, что ожидает вашreadResponse
-метод, поэтому вы передаете ему макетные объекты, которые дают эти ожидаемые (и некоторые неожиданные) значения, чтобы проверить, что ваш метод реагирует должным образом. Очевидно, что это не может проверить, будет ли это работать на практике — только интеграционный тест с реальнымиRepresentation
объектами может проверить, соответствует ли поведение фреймворка вашим ожиданиям.
Ответ №1:
Для модульного тестирования используйте mocking framework, такой как mockito:
import org.hamcrest.Matchers;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.restlet.representation.Representation;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
public class RestletTest {
@Mock
private Representation representation;
@Test
public void demonstrateMock() {
when(representation.getAvailableSize()).thenReturn(1024l);
ClassToTest t = new ClassToTest();
assertThat(t.callRepresentation(representation), Matchers.is(1024l));
}
}
class ClassToTest {
public long callRepresentation(Representation representation) {
return representation.getAvailableSize();
}
}