我如何对持久性进行单元测试?

Jon*_*jap 46 sql-server tdd unit-testing

作为实践测试驱动开发的新手,我常常陷入困境,如何将持久性单元测试数据库.

我知道技术上这将是一个集成测试(不是单元测试),但我想找到以下最佳策略:

  1. 测试查询.
  2. 测试插页.我如何知道插件出现故障?我可以通过插入然后查询来测试它,但是我怎么知道查询没有错呢?
  3. 测试更新和删除 - 与测试插入相同

这些最佳做法是什么?


关于测试SQL:我知道这可以做到,但如果我使用像NHibernate这样的O/R Mapper,它会在用于输出查询的别名中附加一些命名瑕疵,因为这有点不可预测我不确定我可以测试一下.

我应该放弃一切,只是信任NHibernate吗?我不确定这是谨慎的.

Mik*_*one 18

查看数据库单元.它是一个Java库,但必须有一个C#等价物.它允许您使用一组数据准备数据库,以便您知道数据库中的内容,然后您可以与数据库单元连接以查看数据库中的内容.它可以针对许多数据库系统运行,因此您可以使用实际的数据库设置,或使用其他内容,例如Java中的HSQL(具有内存选项的Java数据库实现).

如果您想测试您的代码是否正确使用了数据库(您最有可能应该这样做),那么这就是隔离每个测试并确保数据库已准备好数据的方法.


Jos*_*own 16

正如Mike Stone所说,DbUnit非常适合在运行测试之前将数据库置于已知状态.测试完成后,DbUnit可以将数据库恢复到运行测试之前的状态.

DbUnit(Java)

DbUnit.NET