使用 InMemory 测试
EF Core 数据库提供程序并非就是关系数据库。InMemory 是设计用于测试的通用数据库,而不是模拟关系数据库。
与此相关的样例包括:
- InMemory将允许您保存在关系数据库中违反引用完整性约束的数据
- 如果在模型中对属性使用了 DefaultValueSql(string),由于它是关系数据库的 API,所以针对 InMemory 运行时它会没有效果。
考虑以下服务,其允许应用程序代码执行一些 blog 相关的操作。其内部使用的是链接到 SQL Server 数据库的 。将上下文切换链接到内存 SQLite 数据库将会很有用,这样的话我们无需修改源代码或者做大量工作来重复为上下文创建测试,就可以对该服务编写高效的测试代码。
在测试中你将在外部配置 context 为使用内存提供程序。如果你通过重写 context 的 OnConfiguring
来配置数据库提供程序,那么你就要添加一些条件代码才能确保在没有配置提供程序时才配置它。
为测试添加构造方法
针对不同的数据库,启用测试的最简单方法是修改上下文类型以暴露一个接受 参数的构造方法。
使用该提供程序进行测试的关键点是告知上下文要使用 InMemory 提供程序的能力,以及控制内存数据库范围的能力。通常你会想要为每个测试方法都清理数据库。
以下是一个使用 InMemory 数据库的测试类型样例。每个测试方法都指定了唯一的数据库名称,即意味着每个方法都具有其对应的内存数据库。