单元测试数据库驱动的.NET应用程序如何实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

单元测试大量依赖数据库的.NET中间件的最佳方法是什么?例如,从多个数据库中读取数据,对其进行处理,然后将其组合并写入其他数据库的过程?

数据库是否应该填满每个单元测试运行中重置的静态数据?整个SQL Server访问应该以某种方式被模拟?在现实世界中对这样的应用程序进行单元测试是不可行的?

提问于
用户回答回答于

我发现的方法如下。

将DAL分成2层。底部简单地执行原子读取和写入数据库 - 这些对象都实现了一组接口IReadFromDB和IWriteToDB。

然后,可以在更高的DAL级别创建读写业务逻辑,而不是引用读取和写入数据库引用的对象的接口和使用属性来替代功能。我倾向于在构造函数中包含所需的功能对象,以便事情能够“开箱即用”。

这将使得“交换”功能变得简单,因此单元测试业务逻辑。

至于测试数据库读写......我还没有找到一种不涉及工作的方式。我通常使用不同的连接字符串到数据库副本,然后为单元测试编写数据生成和清理代码,以保持db的状态与之前和之后相同。

是的,它耗费时间......但它不会冒疏远客户的风险。这取决于你的优先事项。

其他人提到了性能测试。我不认为这是单元测试的一部分。我通常使用测试工具与调试代码结合使用,因为小部件的性能常常是误导性的 - 当您转向大局时,实际上是套管问题的部件通常不是本地化测试在我的体验中标记的部分。

用户回答回答于

我认为最好的做法是模拟对数据库的所有访问 - 只需返回一些预定义的静态数据即可 - 无需测试数据库的工作方式 - 您需要测试单元行为。单元测试与外部交互较少 - 效果更好。

mock你的将能够检查到数据库调用是否有效,而不真正调用它,所以这是你所需要的,我认为。

扫码关注云+社区