模拟DbSet SetupData配置混淆

时间:2018-04-24 15:49:42

标签: entity-framework unit-testing moq

我正在使用EntityFramework.Testing.Moq库对我的存储库进行单元测试,但是我遇到了一些困惑,无法在任何地方找到文档。在下面的代码示例中,我使用前面提到的库的SetupData方法来创建一个模拟的DbSet,它可以像真实的一样使用,但只是将数据写入内存而不是数据库。

该方法需要2个参数,第一个是您要预加载到DbSet中的任何数据,第二个是表示DbSet的Find方法的谓词函数。对于单键表我已经使用下面的代码完成了所有工作,虽然我不太明白谓词Find函数中的对象发生了什么魔法。我现在的问题是我有另一个带有复合键的表,所以我不知道如何调整谓词函数以考虑复合键。非常感谢任何帮助。

var mockUserOrganizationRoleData = new List<UserOrganizationRole>();
UserOrganizationRoleDbSetMock = new Mock<DbSet<UserOrganizationRole>>()
    .SetupData(mockUserOrganizationRoleData, objects => mockUserOrganizationRoleData.SingleOrDefault(d => d.UserOrganizationRoleId == (int)objects.First()));

1 个答案:

答案 0 :(得分:0)

我找到了一种让它工作的方法,但这是一种黑魔法,因为我完全不知道这里发生了什么或它是如何工作的。随意解释一下是否有人比我更了解,但这至少做了我想要的。

var mockUserSystemPreferenceData = new List<UserSystemPreference>();
UserSystemPreferenceDbSetMock = new Mock<DbSet<UserSystemPreference>>()
    .SetupData(mockUserSystemPreferenceData, objects => mockUserSystemPreferenceData.SingleOrDefault(d => d.SystemPreferenceId == (int)objects.First() && d.UserId == (Guid)objects.First()));
相关问题