使用流畅的API配置mock DbContext
本文关键字:配置 mock DbContext API | 更新日期: 2023-09-27 18:18:54
在实体框架中,你可以通过在实际的类实体中使用数据注释来配置实体之间的关系:
public class Entity
{
[Key, Column(Order = 0)]
public Guid PartOfPrimaryKey { get; set; }
[Key, Column(Order = 1)]
public Guid AlsoPartOfPrimaryKey { get; set; }
}
或使用fluent API配置
modelBuilder.Entity<Entity>()
.HasKey(k => new { k.PartOfPrimaryKey, k.AlsoPartOfPrimaryKey });
既然你已经使用了流畅的API配置方法,你如何确保在模拟(使用Moq) DbContext进行单元测试时执行配置?
当我模拟DbContext
时,方法OnModelCreating
没有被执行。
这里解释了如何使用mock框架测试应用程序,但它没有解释它们如何处理"配置"实体的问题。我发现的其他帖子也没有解决这个问题。我想我缺少了一些简单的东西。
旁注:我也意识到对DbContext进行单元测试可能根本不是一个好主意,因为你将在测试中使用LINQ to Objects,在生产中使用LINQ to entities。然而,我仍然认为我的问题是有答案的。
更新:如果我使用数据注释代替,它工作得很好
我从不模仿ORM。我更喜欢创建实现接口(例如存储库)并模拟该接口的中间类。不过,让我们看看我能为你做些什么:
模拟DbContext进行单元测试的一个好方法是使用内存中的DB,它将与Fluent API、注释等一起工作。即使它是一个DB,对于单元测试来说仍然足够快。它还允许您以透明的方式模拟插入-读取或插入-更新-读取序列。
请看看这个问题(不要把公认的答案当作最好的答案,因为它不是):
是否有实体框架的内存提供程序?
起初,我还使用Moq针对数据库测试我的代码。但过了一段时间,我遇到了问题,没有任何事情像预期的那样有效。
现在我在这里使用这个:http://effort.codeplex.com/
看一看。对我来说,测试我的代码要容易得多。并且为它编写测试要快得多。