首页 > 解决方案 > 为 ASP.NET Core 集成测试设置文件夹

问题描述

我有两个项目。一个是具有以下结构的 ASP.NET Core 3.1 项目。

MyApp.Web
  wwwroot
    (css, js folders etc.)
    Resources
      (production files)

我也有一个集成测试项目。

MyApp.Web.IntegrationTests
  Resources
    (test files)

集成测试项目包含一个测试类,该类扩展IClassFixture<WebApplicationFactory<MyApp.Web.Startup>>并有自己的Resources包含测试文件的文件夹。

我想将我的测试文件保存在集成测试项目中,并让我的 Web 应用程序Resources在运行集成测试时引用集成测试文件夹。当然,在正常运行 web app 时,web app 应该引用自己的Resources文件夹。

实现这一目标的最佳方法是什么?

标签: asp.netasp.net-coreasp.net-core-3.1

解决方案


最后,我替换了一个依赖项,如下所示。

public class ReportsIntegrationTests : IClassFixture<WebApplicationFactory<Startup>>
{
    public ReportsIntegrationTests(WebApplicationFactory<Startup> factory)
    {
        _factory = factory;
    }
}

[Fact]
async Task CanGetReport()
{
    var client = _factory.WithWebHostBuilder(
        builder =>
        builder.ConfigureServices(services =>
        {
            services.Remove(services.SingleOrDefault(d => d.ServiceType == typeof(IResourcesPathProvider)));
            services.AddSingleton<IResourcesPathProvider, CustomResourcesPathProvider>();
        })).CreateClient();

    var response = await client.GetAsync("/reports?dataSource=DataSource");

    // Checks and assertions...
}

public class CustomResourcesPathProvider : IResourcesPathProvider
{
    public string ResourcesFolder => "Resources";
}

推荐阅读