Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为集成测试隔离数据库操作_Asp.net_Asp.net Mvc_Nhibernate_Integration Testing - Fatal编程技术网

Asp.net 为集成测试隔离数据库操作

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中,会话和事务都不是线程安全的。(这会导致

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

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


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

我通常通过操作不同的数据来实现这一点

例如,假设我有一个集成测试,它检查一个电子商务网站的篮子总数

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


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

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

例如,假设我有一个集成测试,它检查一个电子商务网站的篮子总数

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

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