首先,需要确认已经将应用程序迁移到最小托管模型,这可以通过在ConfigureWebHostDefaults方法中调用UseSockets或UseKestrel方法来完成。
在程序包中添加Microsoft.AspNetCore.Mvc.Testing包,这个包包含有用于集成测试的WebApplicationFactory。
创建一个派生自WebApplicationFactory的测试工厂,其中可以覆盖ConfigureWebHost方法。
public class TestWebApplicationFactory : WebApplicationFactory
if (descriptor != null)
{
services.Remove(descriptor);
}
services.AddDbContext(options =>
{
options.UseInMemoryDatabase("InMemoryDbForTesting");
});
});
}
}
编写集成测试。在测试方法中,可以使用TestServer创建HTTP客户端,并调用WebApplicationFactory类的CreateDefaultClient方法。测试方法中的代码示例:
public class TodoListIntegrationTests : IClassFixture
public TodoListIntegrationTests(TestWebApplicationFactory factory)
{
client = factory.CreateDefaultClient();
}
[Fact]
public async Task GetAll_ReturnsOkResponse()
{
HttpResponseMessage response = await client.GetAsync("/todo");
response.EnsureSuccessStatusCode();
}
}
运行集成测试。
请注意,此解决方案仅限于集成测试,涉及到具有外部依赖关系(例如数据库,API等)的代码的单元测试需要使用其他测试技术,如Mocking和Stubs。