使用流畅的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。然而,我仍然认为我的问题是有答案的。

更新:如果我使用数据注释代替,它工作得很好

使用流畅的API配置mock DbContext

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

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

请看看这个问题(不要把公认的答案当作最好的答案,因为它不是):

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

起初,我还使用Moq针对数据库测试我的代码。但过了一段时间,我遇到了问题,没有任何事情像预期的那样有效。

现在我在这里使用这个:http://effort.codeplex.com/

看一看。对我来说,测试我的代码要容易得多。并且为它编写测试要快得多。