2013-04-12 146 views
1

我刚刚交了一个未完成的asp.Net MVC 3/nHibernate项目来修复和完成,并且我正在尝试获取已通过的nUnit单元测试。单元测试nHibernate存储库 - 如何添加到存储库?

存储库测试是导致问题的原因。我所要做的只是将一些项目添加到测试存储库中,但如果我能够弄清楚如何做到这一点,我就很难受。情况如下:

[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和实际上单元测试的新手,所以我甚至不清楚我的知识差距在哪里,所以我可以研究!任何指针非常赞赏。

回答

1

由于您已将该事务注释掉,因此您的Save()操作未提交。不知何故,您需要将事务管理添加到您的存储库,或者让工作单元为您管理它。或者,如果你想快速和肮脏,你需要一种方法来调用存储库的ISession上的Flush()。