如何使用LINQ2SQL通过存储库在DB上运行集成测试?

RSo*_*erg 6 sql asp.net-mvc integration-testing unit-testing linq-to-sql

您如何通过在实现中使用LINQ 2 SQL的域层/模型(存储库)对数据库进行集成测试,并在发现数据库时保留数据库?换句话说,对DB进行单元测试的理想世界,集成测试会在发现它时留下数据库.

那里有工具可以自动处理吗?通过存储库对DB执行集成测试的最佳实践是什么?

Rob*_*vey 1

Spring 框架在使用 NUnit 时提供对集成测试的支持。NUnit 类位于程序集 Spring.Testing.NUnit.dll 中。其中有一些执行事务管理的类。这些类为每个测试创建并回滚数据库事务。您只需编写可以假设事务存在的代码即可。

这是否真的适用于 Linq to SQL 是另一回事。Spring 表示这适用于 ORM。SQL Server 2008 允许您嵌套事务,因此理论上您可以启动事务,通过 Linq to SQL 类执行测试,然后回滚事务。但我没
试过。

Ryan Garaguay 有一篇关于此的有趣文章,其中使用TransactionScope和 NUnit 回滚数据库更改(尽管他在测试代码中使用 SQLCommand 和 SQLConnection 对象,而不是 Linq)