Asp.net 为集成测试隔离数据库操作
我正在使用NHibernate和ASP.NET/MVC。每个请求使用一个会话来处理数据库操作。对于集成测试,我正在寻找一种方法,使每个测试在一个独立的模式下运行,该模式不会改变数据库,也不会干扰并行运行的其他测试。类似于可以在测试结束时回滚的事务。主要的挑战是每个测试可以发出多个请求。如果一个请求更改了数据,则下一个请求必须能够看到这些更改等 我尝试将会话绑定到auth cookie,以便为以下测试请求创建子会话。但这并不奏效,因为在NHibernate中,会话和事务都不是线程安全的。(这会导致尝试在同一连接上打开多个DataReader) 我还检查了TransactionScope是否可以作为一种方法,但无法从多线程/请求中找出如何使用它Asp.net 为集成测试隔离数据库操作,asp.net,asp.net-mvc,nhibernate,integration-testing,Asp.net,Asp.net Mvc,Nhibernate,Integration Testing,我正在使用NHibernate和ASP.NET/MVC。每个请求使用一个会话来处理数据库操作。对于集成测试,我正在寻找一种方法,使每个测试在一个独立的模式下运行,该模式不会改变数据库,也不会干扰并行运行的其他测试。类似于可以在测试结束时回滚的事务。主要的挑战是每个测试可以发出多个请求。如果一个请求更改了数据,则下一个请求必须能够看到这些更改等 我尝试将会话绑定到auth cookie,以便为以下测试请求创建子会话。但这并不奏效,因为在NHibernate中,会话和事务都不是线程安全的。(这会导致
什么是实现这一点的好方法?我通常通过操作不同的数据来实现这一点 例如,假设我有一个集成测试,它检查一个电子商务网站的篮子总数 我会去创建一个新用户,激活它,将一些项目添加到一个篮子中,计算总数,删除所有创建的数据,并断言我需要什么
因此,流程是:创建所需的数据,对其进行操作,检查它,删除它。通过这种方式,所有测试都可以并行运行,并且不会相互干扰,而且数据总是被清除。我通常通过对不同的数据进行操作来实现这一点 例如,假设我有一个集成测试,它检查一个电子商务网站的篮子总数 我会去创建一个新用户,激活它,将一些项目添加到一个篮子中,计算总数,删除所有创建的数据,并断言我需要什么 因此,流程是:创建所需的数据,对其进行操作,检查它,删除它。这样所有的测试都可以并行运行,并且不会相互干扰,而且数据总是被清理的