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 的事情
现在,我可以像在以前的版本中那样将我的网络单元测试 运行。
我正在使用 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 的事情
现在,我可以像在以前的版本中那样将我的网络单元测试 运行。