Mock MVC. Request / Response#
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.web.servlet.MockMvc;
import static org.hamcrest.Matchers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static ru.tinkoff.qa.neptune.spring.mock.mvc
.GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc
.MockMvcContext.mockMvcGet;
@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {
@Test(description = "Простое выполнение запроса и получение ответа")
public void myTest() {
MockHttpServletResponse response = mockMvcGet(
//описывается запрос:
// метод (GET, POST, PUT или Delete)
response(get("/something") //и
.contentType(APPLICATION_JSON) //параметры
.content("{\"someString\":\"1\"}"))
);
}
}
Ниже пример с явным использованием объекта org.springframework.test.web.servlet.MockMvc
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.web.servlet.MockMvc;
import static org.hamcrest.Matchers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static ru.tinkoff.qa.neptune.spring.mock.mvc
.GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc
.MockMvcContext.mockMvcGet;
@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {
@Autowired //Или любой другой вариант
private MockMvc mockMvc; //инициализации поля или переменной
@Test(description = "Простое выполнение запроса и получение ответа")
public void myTest() {
MockHttpServletResponse response = mockMvcGet(
response(
mockMvc, //явная передача объекта MockMvc
get("/something")
.contentType(APPLICATION_JSON)
.content("{\"someString\":\"1\"}"))
);
}
}
Mock MVC. Описание ожиданий#
Методы, с помощью которых можно описать ожидаемый ответ, можно посмотреть в документации. Названия методов начинаются на expect.
Ниже простой пример
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.web.servlet.MockMvc;
import static org.hamcrest.Matchers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static ru.tinkoff.qa.neptune.spring.mock.mvc
.GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc
.MockMvcContext.mockMvcGet;
@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {
@Test(description = "Простое выполнение запроса и получение ответа")
public void myTest() {
var response = mockMvcGet(
response(get("/something")
.contentType(APPLICATION_JSON)
.content("{\"someString\":\"1\"}"))
// Часто используемые ожидания имеют
.expectStatus(200) //упрощенную запись
.expectContent(containsString("SUCCESS"))
/////////////////////////////////////////
//
//Так же, при необходимости, есть возможности описывать
//ожидания в функциональном стиле
.expectStatus(resultStatus -> {
//некое вычисление или алгоритм
return resultStatus.isOk();
})
.expectContent(contentResultMatchers -> {
//некое вычисление или алгоритм
return contentResultMatchers.string(containsString("SUCCESS"));
})
);
}
}