如何进行数据库单元测试?

juu*_*uur 43 database unit-testing database-testing

我听说在开发使用数据库的应用程序时,您应该进行数据库单元测试.数据库单元测试的最佳实践是什么?进行数据库单元测试以及如何"正确"执行此操作时,主要关注的是什么?

Pas*_*ent 38

数据库单元测试的最佳实践是什么?

DbUnit的框架(一个测试框架,允许把一个数据库中知悉的国家,并针对其内容执行断言)有一个网页列表数据库测试的最佳做法是,以我的经验,都是如此.

进行数据库单元测试时主要关注的是什么

  • 创建最新模式,管理模式更改
  • 设置数据(参考数据,测试数据)和 维护测试数据
  • 保持测试独立
  • 允许开发人员同时工作
  • 速度(涉及数据库的测试通常较慢,会使整个构建需要更多时间)

以及如何"正确"做到这一点?

正如所暗示的那样,遵循已知的良好实践并使用专用工具/框架:

  • 如果可能的话,首选内存数据库(速度)
  • 每个开发人员使用一个模式是必须的(允许并发工作)
  • 使用"数据库迁移"工具(àlaRoR)来管理架构更改并将架构更新为最终版本
  • 构建或使用测试工具,允许在每次测试之前将数据库置于已知状态,并在执行后对数据执行断言(或者在测试结束时回滚的事务中运行测试).


小智 12

使用数据库单元测试时应检查和考虑的项目列表

  • 每个测试人员都需要一个单独的数据库,以避免干扰其他测试人员/开发人员的活动
  • 有一种简单的方法来创建要测试的数据库(这与在版本控制下拥有SQL Server数据库有关).这在尝试查找某些测试失败时出错时特别有用
  • 专注于特定区域并为单个模块创建测试,而不是一次性覆盖所有模块.精确添加测试是提高效率的好方法
  • 确保在测试失败时提供尽可能多的详细信息,以便于调试
  • 对所有测试使用同一个测试数据

如果使用tSQLt框架实现测试,则在处理来自多个SQL Server实例的大量数据库时,单元测试过程可能会很复杂.为了直接从SQL Server Management Studio维护,执行和管理单元测试,可以使用ApexSQL单元测试作为解决方案


Abe*_*ler 10

看看这个链接.它介绍了在SQL Server中创建单元测试存储过程的一些基础知识,以及不同类型的单元测试以及何时应该使用它们.我不确定你使用的DBMS,但很明显这篇文章是针对SQL Server的.

从文章中偷来的:

特征测试

第一个也是最普遍的数据库单元测试类是功能测试.在我看来,功能测试从数据库使用者的角度测试数据库的核心功能或API.测试数据库的可编程性对象是此处的主线方案.因此,测试数据库中的所有存储过程,函数和触发器构成了我脑海中的功能测试.要测试存储过程,您将执行存储过程并验证是否返回了预期结果或是否发生了适当的行为.但是,您可以测试的不仅仅是这些类型的对象.您可以想象想要确保视图,例如,从计算列返回适当的计算.如你看到的,

架构测试

数据库最重要的一个方面是它的模式,并且测试以确保它的行为符合预期是另一类重要的数据库单元测试.在这里,您通常希望确保视图以适当的顺序返回相应数据类型的预期列集.您可能希望确保您的数据库确实包含您期望的1,000个表.

安全测试

在今天这个时代,数据库中存储的数据的安全性至关重要.因此,另一类重要的数据库单元测试是测试数据库安全性的测试.在这里,您需要确保数据库中存在特定用户,并为他们分配适当的权限.您通常希望创建负面测试,尝试从受限制的表或视图中检索数据,并确保适当地拒绝访问.

股票数据测试

许多数据库包含库存数据或种子数据.此数据不经常更改,通常用作应用程序或最终用户的查找数据.邮政编码及其相关的城市和州是此类数据的绝佳示例.因此,创建测试以确保您的库存数据实际上存在于您的数据库中非常有用.


Fed*_*oli 5

我很高兴您询问单元测试,而不是一般的测试。

数据库具有许多需要测试的功能。一些例子:

  • 数据类型/大小/字符集(尝试插入瑞典名称,真实世界中的长网址或数字,并查看列定义是否正确)
  • 扳机
  • 约束(外键,唯一性...)
  • 视图(检查是否正确包含/排除/转换了数据)
  • 存储过程
  • UDF
  • 权限
  • ...

这不仅在更改数据库中的内容时有用,而且在升级dbms或更改设置中时也很有用。

通常,集成测试已完成。这意味着将以PHP或Java之类的编程语言创建一个Test Suite,并且测试会发出一些查询。但是,如果某些操作失败或存在某些例外情况,则很难理解该问题,原因有两个:

  • 问题可能出在您的PHP代码中,或在PHP配置中,或在网络中,或...
  • 如果将SQL语句嵌入另一种编程语言,则它们将更难阅读和修改。

因此,我认为,对于复杂的数据库,您需要使用用SQL编写的单元测试框架(使用存储过程和表)。您必须仔细选择它,因为这种工具并未得到广泛使用(因此未得到广泛测试)。例如,如果您使用MySQL,我知道以下工具: