Микросервисное тестирование интеграции. Каковы основные эквиваленты ASP.NET для @SpringBootTest, @MockBean, Mockito и MockMvc? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть микросервис, который предоставляет конечную точку 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. Когда тест выполняется, весь контекст приложения создается, приложение «запускается»
  2. В контексте есть 1 двойной тест: макет DownstreamRestClient, который я могу настроить в отдельных тестовых случаях (используяMockito), чтобы вернуть действительный ответ, недопустимый или выдать исключение
  3. Я отправляю запрос в конечную точку с помощью помощника Spring MockMvc, который осуществляет весь поток вплоть до DownstreamRestClient
  4. Тогда я утверждаю ответ

Как я могу добиться того же в ASP.NET Core? Каковы эквиваленты ядра ASP.NET для @SpringBootTest, @MockBean, Mockito и MockMvc?

...