为什么不在单元测试中点击数据库?

Hug*_*ata 12 nunit unit-testing

我在博客中读到,单元测试运行时不应该点击数据库.我理解这个理论,但是说我有复杂的商店程序,它们是业务域操作的一部分.我想为与业务操作相关的代码编写一组单元测试,但是如果我模拟数据库,我感觉我不是"真正"测试操作中的所有部分.例如,有人可能会在其中一个数据库代码中创建一个错误,测试仍然可以正常运行.

我想知道这个关于单元测试的指南是否在实践中是好的.我已经看到了"集成测试"的概念,但我不确定使用什么工具来进行集成测试.例如,是否可以使用像Nunit这样的测试框架创建集成测试?

谢谢

雨果

Gor*_*rie 10

你只是在一个语义灰色区域.

  • 系统测试从端到端覆盖整个系统.
  • 单元测试可用于描述端到端周期的子段.

在这种情况下,您的应用程序代码的单元测试将/可能不会访问数据库,但您可能/可能有单元测试覆盖您的数据库存储过程...

基本上将您的应用程序划分为有意义的分区中要测试的内容.如果您选择了错误的分区行,最终会遇到模拟对象和测试脚手架等问题的大代码维护问题......

Web应用程序的一种常见方法是编写一系列测试数据访问层的单元测试...

然后编写一系列测试应用层(包括数据层)的单元测试...

最后写一些基于浏览器的系统测试......

诀窍是只通过API将信息输入和输出中间集 - 应用程序层,而不是挖入数据库以查看是否有效.这样,如果更改数据模式,测试不会中断.

但有时候(正如我实际上正在编写的那样)你必须调查数据库以制作一个有意义且强大的测试套件(我正在测试服务器 - 服务器传输协议).

专注于为您的应用程序获得最大代码覆盖率和稳定性的方式,同时编写最少量的测试脚手架,并避免测试套件中的脆弱性.

  • 我不能告诉你我说了几次完全相同的事情.致我们的Q/A集团!他们看到一个重要的测试,有时不明白存在依赖关系.我有一些弯曲的形状,他们不能多次添加相同的记录.然后我必须说服他们,他们需要在测试中添加设置和拆卸部分.(低级程序员/设计师如何告诉他们如何编写测试<G>) (5认同)