如何自动检查我是否忘了先添加ef核心代码

时间:2019-11-11 08:00:05

标签: c# .net-core entity-framework-core

我们首先将Entity Framework Core 2.2与代码一起使用。有时,我更改了一个实体,但是却忘记了创建新的迁移,或者我只在一个上下文中创建了迁移(我们有不同的数据库引擎)。我想自动检查它(最好是作为NUnit测试),以便它在每次提交时都在我们的CI服务器中运行。

手动,我将尝试创建一个新的迁移,并检查创建的Up()和Down()方法是否为空。有什么办法可以作为NUnit测试吗?

1 个答案:

答案 0 :(得分:1)

创建测试的困难之处在于:

  1. 创建一个新的数据库
  2. 应用所有当前迁移来创建模式
  3. 尝试使用所有实体。只需添加一个实体,查询该实体并对其进行深层比较就可以很简单。
  4. 删除数据库

如果架构没有新实体的迁移或实体中的更改,那么您一定会从中获得SQL错误。

当然,每次创建新实体时,都需要添加新测试。但是,如果使用TDD,那应该已经发生了。

速度也不应该成为问题,因为创建和删除数据库的时间不应该超过几秒钟,并且不会有很多此类测试。而且它们可以并行化。

如果您想花哨并且不想为每个实体编写测试,则可以执行以下操作:

  1. 使用反射获取上下文支持的所有实体类型。
  2. 使用BogusAutoFixture之类的自动数据生成器向实体填充数据。
  3. 通过数据库来回访问实体。
  4. 将原始文档与使用Compare-Net-Objects之类的深度比较器检索到的文档进行比较。

这种自动化方法的有用性将取决于数据模型的复杂性。仅适用于简单模型。但是,如果模型很复杂,则需要进行大量调整和覆盖。