Как смоделировать контроллер в интеграционном тесте? - PullRequest
0 голосов
/ 11 марта 2019

Я хотел бы сделать интеграционный тест (с использованием WebApplicationFactory), который проверяет мою конфигурацию маршрута и уровень сериализации.

Я хочу, чтобы тест (примерно) читался так:

var controllerSpy = new BooksControllerSpy(201);

var factory = new WebApplicationFactory<Startup>();

var client = factory.WithWebHostBuilder(builder =>
             {
                 // ???? inject controllerSpy into controller registry
             }).CreateClient();

var response = await client.PostAsync(
                   "/api/books", 
                   new StringContent(@"{ ""name"": ""The Bible"" }")
               );

Assert.Equal(HttpStatusCode.Created, response.StatusCode);
Assert.Equal("The Bible", controllerSpy.DeserializedCommand.Name);

Мне интересно, как конкретно я могу внедрить контроллер в реестр контроллеров моего тестового сервера, чтобы я мог сосредоточить свой тест на маршрутизации и сериализации.

Заранее благодарим вас за любые идеи, которые у вас есть!

1 Ответ

1 голос
/ 11 марта 2019

ASP.NET Core MVC имеет метод расширения на IMvcBuilder, называемый AddControllersAsServices, который позволяет разработчику регистрировать контроллеры внутри IServiceCollection. Я считаю, что это то, что вы ищете:

var client = new factory.WithWebHostBuilder(builder =>
             {
                 builder.ConfigureServices(services =>
                 {
                     services.AddMvc().AddControllersAsServices();
                     services.AddTransient(context => new YourController("Hello, world!"));
                 });
             }).CreateClient();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...