Web 单元测试未找到 Url

Web Unit Tests not finding Url

我正在使用 aspnetboilerplate 5.1.0。

ProjectName.Web.Tests 中,我 运行 遇到了无法解决的情况。

我已经使用 [Fact][Theory] 为我的控制器设置了网络测试。 当我尝试 运行 使用在 webtestbase class 中找到的 GetResponseAsString(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) 进行测试时。所有测试都失败了。

这是我的测试示例:

     [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

我在版本 3.8.3 和 4.2.1 中还有其他 aspnetboilerplate 项目,网络测试工作正常。所以我不确定为什么服务器无法在我的控制器上找到操作方法。

ProjectName.Tests 项目 运行 中找到的服务测试很好。

我找到了罪魁祸首。我遇到的问题是由于尝试从 aspnetboilerplate 项目模板存储库之一复制 Web 单元测试项目并更新所有引用和 class 名称以匹配目标 VS 解决方案中的名称和命名空间。

我在 aspnetboilerplate github 帐户上提交了类似的问题。 https://github.com/aspnetboilerplate/aspnetboilerplate/issues/5463.

最终,事情是这样的。

在对一个较新的项目进行相同的过程之后。我发现在 class 方法中默认命名为 AbpProjectNameWebTestBase.cs 的文件 protected override IWebHostBuilder CreateWebHostBuilder() { return base .CreateWebHostBuilder() .UseContentRoot(ContentRootFolder.Value) .UseSetting(WebHostDefaults.ApplicationKey, typeof(AbpProjectNameWebModule).Assembly.FullName); }

我错误地将 AbpProjectNameWebModule 替换为 AbpProjectNameTestModule 而不是 AbpProjectNameWebMvcModule。这是试图将应用程序服务单元测试项目用作 Web 项目。因此它找不到任何引用的 URI,因此返回 httpStatusCode.NotFound.

修复此参考后。我开始收到与 public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) 方法有关的异常。

这些是添加 app.UseAuthentication()app.UseAuthorization() 以及需要添加中间件来为 context.User(即 app.UserMiddleware<TestAuthenticationMiddleware>())提供 ClaimsIdentity 和 ClaimsPrincipal 的事情

现在,我可以像在以前的版本中那样将我的网络单元测试 运行。