将一些答案的各个方面放在一起,并添加我的2p ...
注意:我的评论特别涉及数据库测试,而不涉及UI测试(尽管显然适用)。
数据库与前端应用程序一样需要测试,但往往会基于“它可以与前端一起工作吗?”进行测试。还是“报告产生正确的结果?”,在我看来,这是在数据库开发过程中进行的很晚的测试,并且不够鲁棒。
除了通常的UAT /性能/等之外,我们还有许多客户在其数据仓库数据库中利用单元/集成/系统测试。测试。他们发现,通过持续的集成和自动化测试,他们在进入传统UAT之前会发现很多问题,从而节省了UAT时间并增加了UAT成功的机会。
我敢肯定,大多数人都会同意对前端或报表测试的数据库测试应采用类似的严格性。
测试的关键是测试小型简单实体,确保它们的正确性,然后再进行复杂的实体组合,在扩展到更广泛的系统之前确保其正确性。
所以给我的答案一些背景...
单元测试
- 有测试重点来证明单元可以正常工作,例如表,视图,函数,存储过程
- 应该“存根”接口以删除外部依赖项
- 将提供自己的数据。您需要一个已知的数据开始状态,因此,如果有可能存在数据进行预测试,则在填充之前应进行截断/删除操作
- 将理想地在其自己的执行上下文中运行
- 将自行清除并删除其使用的数据;这仅在不使用存根时才重要。
这样做的好处是,您将删除测试的所有外部依赖关系,并执行最少的测试以证明其正确性。显然,这些测试不能在生产数据库上运行。您可能要进行多种测试,具体取决于单元的类型,包括:
- 模式检查,有人可能将其称为“数据合同”测试
- 通过的列值
- 使用功能,过程,视图,计算列的不同数据值执行逻辑路径
- 边缘案例测试-NULL,错误数据,负数,值太大
(单元)集成测试
我发现此SE帖子有助于讨论各种类型的测试。
- 有测试重点来证明单元集成在一起
- 一起在多个单元上表演
- 应该“存根”接口以删除外部依赖项
- 将提供自己的数据,以消除外部数据影响的影响
- 将理想地在其自己的执行上下文中运行
- 将自行清除并删除创建的数据;这仅在不使用存根时才重要。
从单元测试转移到这些集成测试时,通常会有更多的数据,以便测试更多的测试用例。显然,这些测试不能在生产数据库上运行。
然后,随着数据量的增加和范围的扩大,这将继续进行系统测试,系统集成测试(又名端到端测试)。所有这些测试都应该成为回归测试框架的一部分。用户可能会选择其中一些测试作为UAT的一部分来执行,但是UAT是用户定义的测试,而不是IT定义的测试-这是一个常见问题!
现在,我已经给出了一些背景,可以回答您的实际问题
- 为单元测试和集成测试预先填充数据可能会导致虚假的测试错误,应避免使用。
- 确保测试一致的唯一方法是不对源数据进行任何假设并严格控制它。
- 单独的测试执行上下文很重要,以确保一个测试人员不会与在源代码控制的数据库代码的不同分支上执行相同测试的另一个测试人员发生冲突。