隔离数据库操作以进行集成测试

时间:2019-09-04 14:54:22

标签: asp.net asp.net-mvc nhibernate integration-testing

我正在使用NHibernate和ASP.NET/MVC。我每个请求使用一个会话来处理数据库操作。对于集成测试,我正在寻找一种使每个测试以隔离模式运行的方法,该模式不会更改数据库并不会干扰并行运行的其他测试。诸如事务之类的东西可以在测试结束时回滚。主要的挑战是每个测试可以发出多个请求。如果一个请求更改了数据,则下一个请求必须能够看到这些更改等。

我尝试将会话绑定到auth cookie,以为以下测试请求创建子会话。但这不能很好地工作,因为会话和事务在NHibernate中都不是线程安全的。 (这导致尝试在同一连接上打开多个DataReader) 我还检查了TransactionScope是否可以作为一种方法,但无法从多个线程/请求中找出如何使用它。

什么是实现这一目标的好方法?

1 个答案:

答案 0 :(得分:2)

我通常通过对不同的数据进行操作来实现。

例如,假设我有一个集成测试,该测试检查电子商务网站的总金额。

我会去创建一个新用户,激活它,将一些项目添加到购物篮中,计算总数,删除所有创建的数据并根据需要进行断言。

因此流程是:创建所需的数据,对其进行操作,检查,删除。这样,所有测试可以并行运行,并且不会互相干扰,而且数据总是会被清理。