在 Entity Framework 中,您可以通过在实际类实体中使用数据注释来配置实体之间的关系:
public class Entity
{
[Key, Column(Order = 0)]
public Guid PartOfPrimaryKey { get; set; }
[Key, Column(Order = 1)]
public Guid AlsoPartOfPrimaryKey { get; set; }
}
或者通过使用流畅的 API 配置
modelBuilder.Entity<Entity>()
.HasKey(k => new { k.PartOfPrimaryKey, k.AlsoPartOfPrimaryKey });
假设您已经使用了流畅的 API 配置方法,您如何确保在模拟(使用 Moq)DbContext 进行单元测试时执行配置?
当我模拟 DbContext
时,方法 OnModelCreating
没有被执行。
Here是对如何使用模拟框架测试您的应用程序的解释,但它没有解释他们如何处理“配置”实体的问题。我发现的其他帖子也没有解决这个问题。我想我缺少一些简单的东西。
旁注:我也知道对 DbContext 进行单元测试可能根本不是一个好主意,因为 you will use LINQ to Objects in your tests and LINQ to entites in production .但是,我仍然认为我的问题有答案。
更新:如果我改用数据注释,它工作正常。
最佳答案
我永远不会 mock ORM。我更喜欢创建实现接口(interface)(例如存储库)并模拟该接口(interface)的中间类。不过,让我们看看我能为您做些什么:
模拟 DbContext 以使用 Fluent API、注释等进行单元测试的一种好方法是使用内存中的数据库。即使它是一个数据库,对于单元测试来说仍然足够快。它还允许您以透明的方式模拟插入-读取或插入-更新-读取序列。
请查看此问答(不要将已接受的答案视为最佳答案,因为它不是):
关于c# - 使用流畅的 API 配置模拟 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25408072/