Я пытаюсь написать интеграционные тесты для .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
}