Зачем мне нужны зависимости страниц Razor для написания интеграционных тестов для .NET Core Web Api? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь написать интеграционные тесты для .NET Core Web Api, которую я создаю.

В соответствии с найденной документацией Здесь Я ссылался на пакеты Microsoft.AspNetCore.App и Microsoft.AspNetCore.Mvc.Testing через Nuget.

Однако, когда я пытаюсь запустить свои тесты, я получаю исключение со следующим сообщением:

Сообщение: System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'Microsoft.AspNetCore.Razor.Runtime, версия = 2.1.1.0, культура = нейтральная, PublicKeyToken = adb9793829ddae60'. Система не может найти указанный файл.

Похоже, он жалуется, потому что отсутствует зависимость от страниц Razor? Мой Api не использует страницы Razor. Зачем мне эта зависимость? Я что-то не так делаю?

В качестве сопутствующего примечания: в чем разница между Microsoft.AspNetCore.Mvc.Testing и Microsoft.AspNetCore.TestHost? Первый упоминается на странице документа, на которую я ссылался выше, а второй упоминается под заголовком Test Controllers на той же странице, без объяснений.

РЕДАКТИРОВАТЬ: Я использовал Nuget для установки запрошенного пакета в сообщении об ошибке, Microsoft.AspNetCore.Razor.Runtime, и я все еще получаю ту же ошибку. Теперь я в замешательстве.

РЕДАКТИРОВАТЬ 2: По запросу, файл .csproj для тестового проекта.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>

    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Runtime" Version="2.2.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
    <PackageReference Include="xunit" Version="2.3.1" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Api\Api.csproj" />
  </ItemGroup>

</Project>

Моя тестовая настройка приведена ниже:

public class StartupIntegrationTests
    : IClassFixture<WebApplicationFactory<Startup>>
{
    private readonly WebApplicationFactory<Startup> _webAppFactory;

    public StartupIntegrationTests(WebApplicationFactory<Startup> webAppFactory)
    {
        _webAppFactory = webAppFactory.WithWebHostBuilder(builder => builder
            .UseStartup<Startup>()
            .UseSetting("https_port", "443"));
    }


    [Theory]
    [InlineData("/Users")]
    public async Task ShouldUseHttpsForAllRequestsIfClientDidAutoRedirect(string url)
    {
        var client = _webAppFactory.CreateClient();
        var response = await client.GetAsync(url);

        // Ensure that the returned URL is an https url and that there were no errors
        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        Assert.StartsWith("https://localhost:443/",
                          response.RequestMessage.RequestUri.OriginalString);
    }


    // Some more tests omitted to keep things short

}

1 Ответ

0 голосов
/ 08 января 2019

Вероятно, это связано с несовпадением версий между 2.1 и 2.2: вы ориентируетесь на .NET Core 2.1 через <TargetFramework>netcoreapp2.1</TargetFramework>, но вы включаете пакеты 2.2.0. Либо обновите пакеты NuGet до версии 2.1.x, либо обновите приложение до 2.2.0:

  • Загрузите .NET Core 2.2 SDK с здесь
  • Обновите целевой фреймворк вашего приложения с netcoreapp.2.1 до netcoreapp2.2: <TargetFramework>netcoreapp2.1</TargetFramework>. Убедитесь, что вы делаете это для вашего приложения и вашего тестового приложения
  • Обновить все ссылки на пакеты Microsoft.AspNetCore до последней версии (2.2.0 или выше).

Также обязательно включите ссылку на пакет Microsoft.AspNetCore.App в ваш тестовый проект, включив в файл проекта:

<PackageReference Include="Microsoft.AspNetCore.App" />

Относительно вашего вопроса о Microsoft.AspNetCore.Mvc.Testing против Microsoft.AspNetCore.TestHost: пространство имен TestHost состоит из набора типов (включая TestServer), позволяющих размещать ваше приложение в памяти для тестирования. Пакет Microsoft.AspNetCore.Mvc.Testing предоставляет инфраструктуру для функционального тестирования приложений (включая TestServer) с использованием класса WebApplicationFactory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...