У меня есть микросервис, который предоставляет конечную точку REST, и когда эта конечная точка вызывается, служба, в конечном счете, выполняет вызов другой службе, которая является нисходящей, и возвращает ответ, который она получает от нисходящей службы.
Между контроллером и нисходящим сервисным клиентом может быть несколько уровней (сервис, репозиторий и т. Д.), Включая бизнес-логику.
Я хотел бы написать интеграционные тесты (API-тесты), которые отправляют запросы конечной точкеи тестовые сценарии, в которых последующие вызовы службы успешны или неуспешны по разным причинам.
Служба написана на .NET Core 2.2, и я довольно новичок в этом. Тем не менее, у меня есть опыт работы с Java и Spring Boot.
При тестировании службы Spring Boot я бы сделал что-то вроде этого:
@RunWith(SpringRunner.class)
@SpringBootTest(SpringBootTest.WebEnvironment.MOCK, classes = Application.class)
@AutoConfigureMockMvc
public class ControllerIntegrationTest {
@Autowired
private MockMvc mvc;
@MockBean
private DownstreamRestClient client;
@Test
public void givenDownstreamUp_whenGetOrder_thenStatus200() throws Exception {
when(client.getOrder("123")).thenReturn(new Order("123"));
mvc.perform(get("/api/orders/123")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$[0].id", is("123")));
}
}
Объяснение:
- Когда тест выполняется, весь контекст приложения создается, приложение «запускается»
- В контексте есть 1 двойной тест: макет
DownstreamRestClient
, который я могу настроить в отдельных тестовых случаях (используяMockito), чтобы вернуть действительный ответ, недопустимый или выдать исключение - Я отправляю запрос в конечную точку с помощью помощника Spring
MockMvc
, который осуществляет весь поток вплоть до DownstreamRestClient - Тогда я утверждаю ответ
Как я могу добиться того же в ASP.NET Core? Каковы эквиваленты ядра ASP.NET для @SpringBootTest
, @MockBean
, Mockito и MockMvc
?