Миграция. NET Core 2.2 до 3.1 Интеграционный тест от Body всегда нулевой - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь перенести мой API и интеграционный тест с. NET Core 2.2 на 3.1. После переноса и взлома Microsoft меняет настройку, учитывая, что все работает нормально для API prj. Я попробовал почтальоном.

На этом этапе я пытаюсь перенести мой проект интеграционного тестирования, но после миграции все http-вызовы с параметрами [FromBody] go по ошибке, потому что параметры fromBody всегда равны нулю.

Вот еще немного информации:

. NET Код ядра 2.2:

        IWebHostBuilder webHostBuilder = Program.CreateBuilder()
            .UseEnvironment(TestEnvironmentName.Get(inMemory: true))
            .ConfigureEntityFrameworkForTesting(fixture);
        _server = new TestServer(webHostBuilder);

        var client = _server.CreateClient();
        _client = new FluentClient("http://a", client);
        _client.SetHttpErrorAsException(false);

        _testHost = TestHostBuilder.Create()
            .ConfigureServices(services => services.AddTestServiceBus(_server.Host.Services))
            .Build();
        _testHost.Run();

. NET Код ядра 3.1:

               var hostBuilder = new HostBuilder()
               .ConfigureWebHostDefaults(webHost =>
               {
                   // Add TestServer
                   webHost.UseTestServer();
                   webHost.UseEnvironment(HostTestEnvironmentName.Get(inMemory: true))
                        .ConfigureEntityFrameworkForTesting(fixture)
                        .UseStartup<Startup>();
               });

                var host = hostBuilder.Start();
                var client = host.GetTestClient();

                _client = new FluentClient("http://a", client);

                _server = host.GetTestServer();

I уже:

  • Проверьте, содержит ли клиент https, используемый тестами, «ContentType» как json.
  • Попытка удалить беглый клиент и использовать «System. Net .Http.HttpClient».

Теперь мои подозрительные сообщения находятся в этом сообщении, которое я обнаружил при вызове host.GetTestServer ( ). Но это не настоящая ошибка, это не нарушает мою среду выполнения, я просто вижу это с помощью функции быстрого просмотра переменной _server.

Сообщение об ошибке: «Конструктор TestServer не был вызван с IWebHostBuilder, поэтому IWebHost недоступен «. QuickWatchImage

Я не очень уверен, что это связано с моей проблемой, у меня нет идей.

1 Ответ

0 голосов
/ 25 марта 2020

В отсутствие каких-либо других ответов я сделаю это, и вы решите, подходит ли он для одного:

https://developpaper.com/asp-net-core-uses-xunit-for-host-level-network-integration-testing/

В приведенной выше ссылке я нашел свой соус magi c для того же сообщения об ошибке («Конструктор TestServer не был вызван с IWebHostBuilder, поэтому IWebHost недоступен.»).

Мне нужно было изменить код, который обновил IHost (то, что мы должны сделать для 3.0+) для 2.x IWebHost.

Полное раскрытие: я совершенно новичок в интеграционном тестировании и строю свой очень первый сегодня. Но этот код добился цели:

// no dice -- "The TestServer constructor was not called with a IWebHostBuilder...
// var hostBuilder = Your.App.Program.CreateHostBuilder(new string[0], config);
// using var system = new SystemUnderTest(hostBuilder);

// this seems to be the way forward
var webHostBuilder = new WebHostBuilder()
    .UseStartup<<Your.App.Startup>()
    .UseConfiguration(config);
using var system = new SystemUnderTest(webHostBuilder);

В любом случае, вот где я сейчас. Кажется, я могу пережить худшее из этого.

...