以下是針對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