Web单元测试找不到Url



我使用的是aspnetboileplate 5.1.0。

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

我已经使用[Fact][Theory]为我的控制器设置了web测试。当我尝试使用webtestbase类中的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中有其他aspnetboileplate项目,web测试工作得很好。所以我不知道为什么服务器无法在我的控制器上找到操作方法。

ProjectName.Tests项目中发现的服务测试运行良好。

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

我在aspnetboilerplate github帐户上提交了一个类似的问题。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。这是在尝试将应用程序服务单元测试项目用作web项目。因此,它找不到任何引用的URI,因此返回了httpStatusCode.NotFound

在固定此参考之后。我开始获取与public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)方法有关的异常。

这些内容包括添加app.UseAuthentication()app.UseAuthorization(),以及需要添加中间件来为上下文提供ClaimsIdentity和ClaimsPrincipal。用户(即app.UserMiddleware<TestAuthenticationMiddleware>()(

现在,我可以像以前的版本一样运行我的web单元测试了。