我听说在开发使用数据库的应用程序时,您应该进行数据库单元测试。
数据库单元测试的最佳实践是什么?进行数据库单元测试时主要关注什么以及如何“正确”地进行测试?
我听说在开发使用数据库的应用程序时,您应该进行数据库单元测试。
数据库单元测试的最佳实践是什么?进行数据库单元测试时主要关注什么以及如何“正确”地进行测试?
数据库单元测试的最佳实践是什么?
DbUnit框架(一个允许将数据库置于已知状态并对其内容执行断言的测试框架)有一个页面列出了数据库测试最佳实践,根据我的经验,这些实践是正确的。
进行数据库单元测试时的主要关注点是什么
以及如何“正确”地做到这一点?
正如所暗示的,遵循已知的良好实践并使用专用工具/框架:
开始进行数据库单元测试时应审查和考虑的项目列表
如果使用 tSQLt 框架实现测试,则在处理来自多个 SQL Server 实例的大量数据库时,单元测试过程可能会很复杂。为了直接从 SQL Server Management Studio 维护、执行和管理单元测试,可以使用ApexSQL 单元测试作为解决方案
看看这个链接。它介绍了在 SQL Server 中创建单元测试存储过程的一些基础知识,以及不同类型的单元测试以及何时应该使用它们。我不确定您使用的是什么 DBMS,但显然这篇文章是针对 SQL Server 的。
从文章中窃取:
功能测试
第一个也是最流行的数据库单元测试类是特性测试。在我看来,功能测试是从数据库使用者的角度测试数据库的核心功能——或者 API,如果你愿意的话。测试数据库的可编程性对象是这里的主线场景。因此,在我看来,测试数据库中的所有存储过程、函数和触发器构成了功能测试。要测试存储过程,您将执行存储过程并验证是否返回了预期的结果或发生了适当的行为。但是,您可以测试的不仅仅是这些类型的对象。例如,您可以想象要确保视图从计算列返回适当的计算。如你看到的,
模式测试
数据库最关键的方面之一是它的模式,并且测试以确保它按预期运行是另一类重要的数据库单元测试。在这里,您通常希望确保视图以适当的顺序返回适当数据类型的预期列集。您可能希望确保您的数据库确实包含您期望的 1,000 个表。
安全测试
在当今时代,存储在数据库中的数据的安全性至关重要。因此,另一类重要的数据库单元测试是测试数据库安全性的那些。在这里,您需要确保特定用户存在于您的数据库中,并且为他们分配了适当的权限。您经常需要创建否定测试,尝试从受限制的表或视图中检索数据,并确保适当地拒绝访问。
股票数据测试
许多数据库包含股票数据或种子数据。此数据很少更改,通常用作应用程序或最终用户的查找数据。邮政编码及其相关的城市和州是此类数据的绝佳示例。因此,创建测试以确保您的股票数据确实存在于您的数据库中是很有用的。
我很高兴您询问了单元测试,而不是一般测试。
数据库有许多需要测试的特性。一些例子:
这不仅在您更改数据库中的某些内容时很有用,而且在您升级 dbms 或更改设置中的某些内容时也很有用。
通常,集成测试已完成。这意味着创建了一个使用 PHP 或 Java 等编程语言的测试套件,并且测试会发出一些查询。但是,如果某些事情失败了,或者有一些例外,就很难理解这个问题,原因有两个:
因此,在我看来,对于复杂的数据库,您需要使用用 SQL 编写的单元测试框架(使用存储过程和表)。您必须仔细选择它,因为这种工具没有被广泛使用(因此没有被广泛测试)。例如,如果您使用 MySQL,我知道这些工具:
我使用 junit/nunit/etc 并使用 java 或 c# 编写数据库单元测试。然后这些可以在集成服务器上运行,可能使用测试数据库的单独模式。
最新的 oracle sql 开发人员带有一个内置的单元测试框架。我看过这个但不会使用它。它使用 GUI 来创建和运行测试并将所有测试存储在数据库中,因此将测试用例置于版本控制之下并不容易。可能还有其他测试框架,我想它们可能特定于您的数据库。
良好实践类似于常规单元测试:
看看 DBTestDriven 框架。它对我们很有用。从 GitHub 或他们的网站下载。
至于 JVM 开发,单元测试可以从 JDBC 抽象中受益:只要您知道哪些 JDBC 数据是由 DB 访问引发的,这些 JDBC 数据就可以“重放”。
因此,可以“复制”数据库访问案例以进行测试,而无需目标数据库:没有测试/数据隔离复杂性,易于持续集成。
我的框架 Acolyte 以这种方式是一个有用的框架(包括用于“记录”数据库结果的工作室 GUI 工具):https ://github.com/cchantep/acolyte
单元测试的应用可以让你确保一旦你写了一些东西,它就可以被验证,然后当它需要改变的时候,你可以验证所有之前通过的测试都会继续通过。无论您是公司中唯一的数据库人员,还是公司中有 1000 人。无论您有一个数据库还是 1000 个数据库。
这将使您确信您的更改将更加准确,并且不太可能破坏依赖您的代码的其他内容。毕竟,这将不可避免地帮助你在晚上睡觉,更多地享受你的假期,并对你的发展更有信心。
QA 工程师控制数据库测试中的视图和触发器,他们可以创建数据库的空白实例以使用最少的构建块开始。
以下是测试人员如何对数据库执行单元测试:
现在数据库与应用程序代码有很大不同——它们需要更高的精度。必须定期对其进行测试,以避免破坏数据完整性等。
在执行单元数据库测试时我们应该记住:
在对 SQL 数据库执行单元测试时,有许多测试管理和测试自动化工具会很有帮助。我使用<a href="https://docs.microsoft.com/en-us/azure/data-factory/introduction" rel="nofollow noreferrer">数据工厂、aqua ALM、Mockup Data和DTM Data Test发电机。