以下是针对FluentNHibernate-1.1.0.685(NHibernate-2.1.2.4000)的存储库的简单测试。 Session和NH配置由测试夹具提供。为什么调用Session.Clear()会导致此测试失败?
[Test] public void ShouldEdit() { var employee = CreateEmployee(); session.Clear(); var changedEmployee = _testRepository(employee.id); changedEmployee.FirstName = "Ringo"; _testRepository.SaveOrUpdate(changedEmployee); session.Flush(); session.Clear(); // Pulling this call will allow the test to pass. var employees = (IList)_testRepository.GetAll(); Assert.Contains(changedEmployee, employees); Assert.IsFalse(employees.Contains(employee)); } Employee CreateEmployee() { var e = {Id = 1, FirstName = "George", LastName = "Washington" }; _testRepository.SaveOrUpdate(e); session.Flush(); return e; }
如果我摆脱了第二次调用Clear(),该测试将通过。如果我离开电话但是然后测试将失败,出现以下情况:
Failed: Expected: Collection containing <Employee> But was: < <Employee> >
不是很有帮助。除此之外,为什么我需要删除第二次调用Clear()?
Flush()将与db同步,如果我正确理解documentation,则Clear()将会驱逐会话缓存。这似乎正是我想要的行为,所以我可以确定我没有测试过时的数据。事实上,我希望测试失败没有调用Clear(),但事实并非如此。有人可以阐明这种行为吗?
(注:这是在PragProg书“试驾ASP.Net MVC”好书第10章发现BTW上的存储库测试的变化。)
谢谢。这很有道理。 – nerraga 2010-07-19 01:54:18