使用流畅的API配置模拟DbContext

Jim*_*Aho 5 c# unit-testing entity-framework mocking

在Entity Framework中,您可以通过在实际类实体中使用数据注释来配置实体之间的关系:

public class Entity
{
    [Key, Column(Order = 0)]
    public Guid PartOfPrimaryKey { get; set; }

    [Key, Column(Order = 1)]
    public Guid AlsoPartOfPrimaryKey { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

或者使用流畅的API配置

    modelBuilder.Entity<Entity>()
                .HasKey(k => new { k.PartOfPrimaryKey, k.AlsoPartOfPrimaryKey });
Run Code Online (Sandbox Code Playgroud)

假设您已经使用了流畅的API配置方法,那么如何在模拟(使用Moq)DbContext进行单元测试时确保执行配置?

当我嘲笑该DbContext方法OnModelCreating没有被执行.

下面是如何使用模拟框架测试应用程序的说明,但它没有解释他们如何通过"配置"实体来解决问题.我发现的其他帖子也没有解决这个问题.我想有一些我想念的简单.

旁注:我也知道,对你的DbContext进行单元测试可能不是一个好主意,因为你将在测试中使用LINQ to Objects而在生产中使用LINQ.但是,我仍然认为我的问题有答案.

更新:如果我使用数据注释,它可以正常工作.

Jot*_*aBe 2

我永远不会嘲笑 ORM。我更喜欢创建实现接口(例如存储库)的中间类并模拟该接口。不过,让我们看看我能为您做些什么:

模拟 DbContext 进行单元测试并与 Fluent API、注释等配合使用的一个好方法是使用内存数据库。即使它是一个数据库,对于单元测试来说仍然足够快。它还允许您以透明的方式模拟插入读取或插入更新读取序列。

请参阅此问答(不要将接受的答案视为最好的答案,因为它不是):

是否有实体框架的内存提供程序?