使用 Respawn 在 .NET 测试中轻松重置数据库

Respawn - 重生

Respawn 是一个非常小但是实用的工具,它可以很方便的将测试或开发数据库重置为空状态。

这特别适合在集成测试中使用,集成测试运行之后,通过 Respawn 自动化的清除数据,回到测试之前的数据库状态。.

如何使用?

使用 Nuget 安装 Respawn

Install-Package Respawn

或者使用 .NET Core CLI:

dotnet add package Respawn

通过使用 Respawner 进行配置,如下

var respawner = await Respawner.CreateAsync(connection, new RespawnerOptions
{
    TablesToIgnore = new Table[]
    {
        "sysdiagrams",
        "tblUser",
        "tblObjectType",
        new Table("MyOtherSchema", "MyOtherTable")
    },
    SchemasToExclude = new []
    {
        "RoundhousE"
    }
});

上面代码指定了处理需要跳过的表或者 Schema 。

使用下面的代码,将数据库重置为干净的状态。

await respawner.ResetAsync("MyConnectionStringName");

如果您使用的是 SQL Server 之外的数据库,可以传递 DbConnection:

using (var conn = new NpgsqlConnection("ConnectionString"))
{
    await conn.OpenAsync();

    await respawner.ResetAsync(conn);
}
它是如何工作的?

Respawn 智能地检查 SQL 元数据,根据表之间的外键关系构建要删除的表的确定顺序。它导航这些关系并构建 DELETE 脚本,从没有关系的表开始,向内移动,直到考虑到所有表。

项目地址

https://github.com/jbogard/Respawn