首页 / 问答 / ASP NET Core WebAPI 中使用 xUnit 单元测试怎么配置服务器初始化

ASP NET Core WebAPI 中使用 xUnit 单元测试怎么配置服务器初始化

ASP.NET Core .NET 7 1.66K 次浏览
0

在我的项目是 NET Core 7.0 WebAPI 使用 xUnit进行单元测试

有两个测试类 和 多个测试方法

所有测试方法都需要 进行数据库初始化 然后带上 JWT token 用于认证

应该怎样进行初始化 比较合理

现在我单独对每个测试方法进行测试 都能成功

但同时对所有测试方法进行测试会造成后开始测试的方法报错

回复 [×]
提交评论
请输入评论内容

1 个回答

  • 0

    是不是测试类中的数据库连接没有被及时关闭?如果是的话,一个好的方法是在测试类中实现IDisposable接口,然后在Dispose()方法中清理测试过程中创建的资源。

    Dispose()方法中,你可以关闭数据库连接并删除测试数据等,以确保测试结束后不会留下不必要的遗留数据。

    下面是一个简单的示例:

    public class MyTestClass : IDisposable
    {
        private readonly TestServer _server;
        private readonly HttpClient _client;
        private readonly ApplicationDbContext _dbContext;
        private readonly string _jwtToken;
    
        public MyTestClass()
        {
            // 创建 TestServer 和 HttpClient
            _server = new TestServer(new WebHostBuilder().UseStartup());
            _client = _server.CreateClient();
    
            // 在这里初始化数据库
            _dbContext = _server.Host.Services.GetRequiredService();
            _dbContext.Database.EnsureCreated();
    
            // 在这里获取 JWT token,可以使用特定的用户或生成一个测试用户
            _jwtToken = // 获取 JWT token 的代码
        }
    
        public void Dispose()
        {
            // 在这里清理测试过程中创建的资源
            _dbContext.Database.EnsureDeleted();
            _client.Dispose();
            _server.Dispose();
        }
    
        [Fact]
        public async Task TestMethod1()
        {
            // 使用 _client 和 _jwtToken 进行测试
            // ...
        }
    
        [Fact]
        public async Task TestMethod2()
        {
            // 使用 _client 和 _jwtToken 进行测试
            // ...
        }
    }
    

    请注意,每个测试方法都应该是独立的,不应该依赖于其他测试方法的状态或结果。如果你的测试方法之间有依赖关系,你可能需要重构你的测试代码。此外,还应该确保测试环境与生产环境隔离,避免测试过程中对生产数据产生影响。

    Rector的个人主页

    Rector

    2023-03-15 回答

    我来回答