2010-08-09 154 views
1

我想了解在Visual Studio 2010单元测试中如何保持我的测试过程中添加,更新或删除的数据事务,以便我的TestCleanup可以回滚它们的值。Visual Studio 2010单元测试

我应该使用哪些搜索条件来查找更多关于此?

干杯

保罗

回答

3

为什么你需要回滚的变化?您的单元测试是否更新实时数据?如果单元测试写得不错,你不应该在你的测试更改之后清理干净,因为它们正在改变的数据应该与测试隔离。

编辑:

这听起来像你已经设置了用于测试的数据集,并希望确保数据集恢复到原来的状态。我更喜欢将测试数据设置为测试的一部分,但我知道对于复杂测试可能会很困难。

如果在ADO.NET数据源中,您可以启动一个事务,然后在测试结束时回滚该事务。例如:

using (var transaction = db.BeginTransaction()) 
{ 
    // Do tests here 
} 
// The transaction is rolled back when disposed 

编辑2:

第三个选择,如果你没有交易的支持,是让你的测试数据的一个备份,在一个地方,它不会得到修改,然后在测试结束时,恢复该备份。

+0

不,我只使用测试数据集。 如果我的测试从测试数据库执行DELETE,那么我真的想要在测试数据集已成功执行DELETE到其原始状态后回滚测试数据集,以便我可以在另一个测试中使用此数据。 – 2010-08-09 22:58:40

+0

我明白了。您可以采取的另一种方法是创建测试所需的测试数据作为该测试的设置。 – Jacob 2010-08-09 23:01:21

1

对于单元测试,您应该尝试使用mocks而不是访问测试数据库。单元测试通常应该是完全独立的(不要依赖外部来源,例如数据库)。

如果你实际测试的数据库调用,那么这可能是一个集成测试在这种情况下,您可以:

  1. 在设置创建测试数据
  2. 运行代码
  3. 断言测试通过
  4. 删除步骤一中插入的测试数据
+0

我有点同意单元测试通常应该是自包含的,不依赖于外部资源......但是我正在为我的NHibernate数据提供程序编写测试,所以我真的需要测试它是否适用于数据库。 – 2010-08-09 23:21:04

+0

我会放弃步骤4,并确保第一步可以处理它不期望的数据。 – 2010-08-10 09:56:56