Unit testing Web单元测试找不到Url

Unit testing Web单元测试找不到Url,unit-testing,xunit,aspnetboilerplate,Unit Testing,Xunit,Aspnetboilerplate,我使用的是ASPNeboilerplate 5.1.0 在ProjectName.Web.Tests中,我遇到了无法解决的情况 我已经使用[事实]或[理论]为我的控制器设置了web测试。 当我尝试使用webtestbase类中的GetResponseAsString(字符串url,HttpStatusCode expectedStatusCode=HttpStatusCode.OK)运行测试时。所有的测试都失败了 以下是我的测试示例: [Fact] public async T

我使用的是ASPNeboilerplate 5.1.0

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

我已经使用
[事实]
[理论]
为我的控制器设置了web测试。 当我尝试使用webtestbase类中的
GetResponseAsString(字符串url,HttpStatusCode expectedStatusCode=HttpStatusCode.OK)运行测试时。所有的测试都失败了

以下是我的测试示例:

     [Fact]
    public async Task Index_Test()
    {

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

        //Assert
        response.ShouldNotBeNullOrEmpty();
    }
我还有其他版本3.8.3和4.2.1中的aspnetboilerplate项目,web测试工作正常。因此,我不确定为什么服务器无法在我的控制器上找到操作方法


项目名称中找到的服务测试。测试运行正常。

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

我在aspnetboilerplate github帐户上提交了一个类似的问题。

归根结底,事情就是这样

在与较新的项目经历相同的过程之后。我在图书馆里找到的 在方法中默认命名为
AbpProjectNameWebTestBase.cs
的类文件
受保护的覆盖IWebHostBuilder CreateWebHostBuilder()
{
返回基地
.CreateWebHostBuilder()
.UseContentRoot(ContentRootFolder.Value)
.UseSetting(WebHostDefaults.ApplicationKey,typeof(AbpProjectNameWebModule.Assembly.FullName);
}

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

修复此引用之后。我开始得到与
public void Configure(iaapplicationbuilder应用程序、IWebHostEnvironment env、iLogger工厂loggerFactory)
方法相关的异常

例如添加
app.UseAuthentication()
app.UseAuthentication()
以及需要添加中间件来为context.User(即
app.UserMiddleware()
)提供ClaimsEntity和ClaimsPrincipal


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

您还没有提供很多关于您的环境的信息,目前您假设每个人都是aspnet样板模板差异方面的专家。向我们展示更多代码:控制器是什么样子的?GetResponseAsString()方法做什么?您是否正在运行测试主机服务器?如果遇到断点,是否可以在浏览器中访问它?更新你的问题,如果你找到了答案,发布它,并在24小时后将其标记为已回答。
Message: 
    Shouldly.ShouldAssertException : response.StatusCode
        should be
    HttpStatusCode.OK
        but was
    HttpStatusCode.NotFound