我刚刚完成了一个未完成的asp.Net MVC 3 / nHibernate项目来修复和完成,我正在尝试获取已经存在的nUnit单元测试。
存储库测试导致问题。我所要做的就是在测试库中添加几个项目,但是如果我能弄清楚如何做到这一点我就知道了。情况如下:
[Test]
public void CanGetAllThings()
{
ServiceLocatorInitializer.Init();
ThingRepository thingRepository = new ThingRepository(); // ThingRepository inherits from NHibernateRepository<T>, IRepository<T>
Thing thingA = new Thing { /*initialization values*/ };
Thing thingB = new Thing { /*initialization values*/ };
componentAuthorizationRepository.DbContext.BeginTransaction();
ThingRepository.Save(ThingA); // Doesn't appear to be doing anything
ThingRepository.Save(ThingB);
componentAuthorizationRepository.DbContext.CommitTransaction();
ThingRepository.GetAll().ShouldNotBeNull(); // Passes
ThingRepository.GetAll().Count.ShouldEqual(2); // Fails with actual value 0
}
我是否应该使用模拟框架来创建内存数据库?对于这样一个简单的测试来说,这似乎有点过分了,应该只有一个Repository.Add()或Repository.Save()方法,但我显然在这里缺少一些关键的东西。
我是初级开发人员,是MVC,nHibernate和事实单元测试的新手,所以我甚至不知道我的知识差距在哪里,所以我可以研究!任何指针都非常感激。
答案 0 :(得分:1)
由于您已注释掉该事务,因此您的Save()操作未被提交。不知何故,您需要将事务管理添加到存储库,或者让工作单元为您管理它。
或者,如果你想要快速和脏,你需要一种方法来调用存储库的ISession上的Flush()。