我使用Moq和EF6。
在下面的代码中,我为3个DbContext对象和一个配置管理器创建了一个模拟器,所有这些都被传递给 HomeController 的构造函数。
Mock<BAMContext> bamDbContext = new Mock<BAMContext>();
Mock<ESBContext> esbDbContext = new Mock<ESBContext>();
Mock<UserPrefsContext> userPrefsDbContext = MockUserPrefsContext.GetContext(interchangeIds);
var controllerContext = MockWebContext.AuthenticatedContext(adminUsers.First(), true);
Mock<IConfigurationManager> configurationManager = new Mock<IConfigurationManager>();
configurationManager.Setup(cm => cm.GetAppSetting("AdminUsers")).Returns(@"BizTalkBuild01\BizTalkAdmin;lgss\iwhite;");
HomeController controller = new HomeController(bamDbContext.Object, esbDbContext.Object, userPrefsDbContext.Object, configurationManager.Object);
controller.EnsureAdminUsersHaveDbRecs();
EnsureAdminUserHaveDbRecs方法将插入所需的recs。它还设置了一个公共属性 UserPrefsContext ,以便我在断言的单元测试中引用它。插入到模拟db上下文似乎工作正常,但如果我添加以下循环,则调试器不会介入:
foreach (var rec in controller.UserPrefsContext.UserRecs.ToList())
{
Debug.WriteLine(rec.AdLogonId);
}
但是,如果我输入? controller.UserPrefsContext.UserRecs.Count()在即时窗口中给出结果3.我也可以用例如打印数据来打印数据。 ? controller.UserPrefsContext.UserRecs.First()。AdLogonId
任何人都可以解释为什么我不能迭代这3个recs吗?