Тестирование интеграции ядра ASP.net с унаследованным классом запуска.Невозможно найти вид - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь написать несколько интеграционных тестов на ядре 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 находится в тестовом проекте, виды не могут быть найдены. Какие настройки мне не хватает, чтобы найти Виды?

1 Ответ

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

Оказывается, мне не хватало .UseContentRoot(Directory.GetCurrentDirectory() + "\\..\\..\\..\\..\\IntegrationTestingWeb") при создании WebHostBuilder.Как это звучит, он устанавливает корневой каталог, где приложение будет искать представления и т. Д.

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