单元测试nHibernate存储库 - 如何添加到存储库?

时间:2013-04-12 13:37:06

标签: asp.net-mvc nhibernate nunit

我刚刚完成了一个未完成的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和事实单元测试的新手,所以我甚至不知道我的知识差距在哪里,所以我可以研究!任何指针都非常感激。

1 个答案:

答案 0 :(得分:1)

由于您已注释掉该事务,因此您的Save()操作未被提交。不知何故,您需要将事务管理添加到存储库,或者让工作单元为您管理它。

或者,如果你想要快速和脏,你需要一种方法来调用存储库的ISession上的Flush()。