单元测试数据库驱动的.NET应用程序

Ben*_*een 17 .net sql-server unit-testing

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

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

Joh*_*las 5

答案是嘲笑

然而,我发现的方法如下.

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

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

这将使得"交换"功能变得简单,从而对业务逻辑进行单元测试.

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

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

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