Я пытаюсь написать несколько интеграционных тестов на ядре aspnet 2.2. Я хочу использовать класс TestStartup, который наследуется от обычного класса Startup, для настройки ресурсов и служб в целях тестирования.
Простой пример (можно найти здесь: https://github.com/davidgouge/aspnet-integration-testing):
У меня есть решение, которое содержит два проекта:
IntegrationTestingWeb (базовое приложение aspnet mvc)
IntegrationTestingTests (тестовый проект)
У меня есть тест, который использует класс Web Startup и утверждает, что OK возвращается с /Home/Privacy
[Test]
public async Task GetPrivacy_Through_Normal_Startup()
{
var builder = new WebHostBuilder().UseStartup<Startup>();
var client = new TestServer(builder).CreateClient();
var result = await client.GetAsync("/Home/Privacy");
result.StatusCode.Should().Be(HttpStatusCode.OK);
}
Этот тест пройден.
Если я создаю класс TestStartupInTestProject, который наследуется от автозагрузки, но помещаю его в проект Tests, то мне придется проделать некоторую дополнительную работу при создании WebHostBuilder, но тогда тест не пройден.
[Test]
public async Task GetPrivacy_Through_Test_Startup_In_Test_Project()
{
var builder = new WebHostBuilder().ConfigureServices(services =>
{
var startupAssembly = typeof(TestStartupInTestProject).GetTypeInfo().Assembly;
var manager = new ApplicationPartManager();
manager.ApplicationParts.Add(new AssemblyPart(startupAssembly));
manager.ApplicationParts.Add(new AssemblyPart(typeof(HomeController).Assembly));
manager.FeatureProviders.Add(new ControllerFeatureProvider());
manager.FeatureProviders.Add(new ViewComponentFeatureProvider());
services.AddSingleton(manager);
}).UseStartup<TestStartupInTestProject>();
var client = new TestServer(builder).CreateClient();
var result = await client.GetAsync("/Home/Privacy");
result.StatusCode.Should().Be(HttpStatusCode.OK);
}
Ошибка в ошибке:
Tests.Tests.GetPrivacy_Through_Test_Startup_In_Test_Project
System.InvalidOperationException : The view 'Privacy' was not found. The
following locations were searched:
/Views/Home/Privacy.cshtml
/Views/Shared/Privacy.cshtml
/Pages/Shared/Privacy.cshtml
Так выглядит, потому что мой класс Startup находится в тестовом проекте, виды не могут быть найдены. Какие настройки мне не хватает, чтобы найти Виды?