Веб-юнит-тесты не находят URL - PullRequest
0 голосов
/ 31 марта 2020

Я использую aspnetboilerplate 5.1.0.

В ProjectName.Web.Tests я столкнулся с ситуацией, которую не могу разрешить.

Я настроил веб-тесты для моего контроллера с помощью [Fact] или [Theory]. Когда я пытаюсь запустить тесты, используя GetResponseAsString(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK), найденный в классе webtestbase. Все тесты не пройдены.

Вот пример моего теста:

     [Fact]
    public async Task Index_Test()
    {

        //Act
        var response = await GetResponseAsStringAsync(
            GetUrl<HomeController>(nameof(HomeController.Index))
        );

        //Assert
        response.ShouldNotBeNullOrEmpty();
    }

Все тесты не пройдены на этом:

Message: 
    Shouldly.ShouldAssertException : response.StatusCode
        should be
    HttpStatusCode.OK
        but was
    HttpStatusCode.NotFound

У меня есть другие проекты aspnetboilerplate в версии 3.8.3 и 4.2.1 и веб-тесты работают просто отлично. Поэтому я не уверен, почему сервер не может найти методы действия на моих контроллерах.

Сервисные тесты, обнаруженные в проекте ProjectName.Tests, работают нормально.

1 Ответ

1 голос
/ 03 апреля 2020

Я нашел виновника. Проблема, с которой я столкнулся, была связана с попыткой скопировать проект для веб-модульных тестов из одного из репозиториев шаблонов проекта aspnetboilerplate и обновить все ссылки и имена классов, чтобы они соответствовали именам и пространствам имен в решении VS назначения.

Я отправил аналогичный вопрос на учетную запись github aspnetboilerplate. https://github.com/aspnetboilerplate/aspnetboilerplate/issues/5463.

В конечном счете, вот что произошло.

После того же процесса с новым проектом. Я обнаружил, что в файле класса, который по умолчанию будет называться AbpProjectNameWebTestBase.cs в методе protected override IWebHostBuilder CreateWebHostBuilder() { return base .CreateWebHostBuilder() .UseContentRoot(ContentRootFolder.Value) .UseSetting(WebHostDefaults.ApplicationKey, typeof(AbpProjectNameWebModule).Assembly.FullName); }

, я по ошибке заменил AbpProjectNameWebModule на AbpProjectNameTestModule вместо AbpProjectNameWebMvcModule. Он пытался использовать тестовый проект Application Service Unit в качестве веб-проекта. Поэтому он не смог найти ни один из ссылочных URI и поэтому возвратил httpStatusCode.NotFound.

После исправления этой ссылки. Я начал получать исключения, относящиеся к методу public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory).

Это были такие вещи, как добавление app.UseAuthentication() и app.UseAuthorization(), а также необходимость добавления промежуточного программного обеспечения для предоставления ClaimsIdentity и ClaimsPrincipal для context.User. (т. е. app.UserMiddleware<TestAuthenticationMiddleware>())

Теперь я могу запустить свои веб-модульные тесты, как в предыдущих версиях.

...