在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解释了如何使用模拟框架测试应用程序,但它没有解释他们如何通过“配置”实体来解决问题。我发现的其他帖子也没有解决这个问题。我想有一些简单的东西我不知道。
旁注:我也知道,对{DHContext进行单元测试可能不是一个好主意,因为you will use LINQ to Objects in your tests and LINQ to entites in production。但是,我仍然认为我的问题有答案。
更新:如果我使用数据注释,它可以正常工作。
答案 0 :(得分:1)
我永远不会嘲笑ORM。我更喜欢创建实现接口的中间类(例如存储库)并模拟该接口。但是,让我们看看我能为你做些什么:
模拟用于Fluent API,注释等单元测试的DbContext的好方法是使用内存数据库。即使它的DB仍然足够快以进行单元测试。它还允许您以透明的方式模拟插入读取或插入更新读取序列。
请参阅此问答(并且不要将接受的答案视为最佳答案,因为它不是):
答案 1 :(得分:0)
起初我还使用Moq来测试我的代码对数据库。但过了一段时间我遇到了问题,没有按预期工作。
现在我在这里使用这个: http://effort.codeplex.com/
看看它。对我来说,测试我的代码要容易得多。并且为它编写测试要快得多。