我听说在开发使用数据库的应用程序时,您应该进行数据库单元测试。数据库单元测试的最佳实践是什么?进行数据库单元测试以及如何“正确”执行此操作时,主要关注的是什么?
答案 0 :(得分:36)
数据库单元测试的最佳实践是什么?
DbUnit框架(允许将数据库置于已知状态并对其内容执行断言的测试框架)有一个页面列出数据库测试best practices,根据我的经验,这是真的
进行数据库单元测试时主要关注的是什么
如何做到“正确”?
正如所暗示的那样,遵循已知的良好实践并使用专用工具/框架:
答案 1 :(得分:12)
在开始使用数据库单元测试时应该检查和考虑的项目列表
如果使用tSQLt框架实现测试,则在处理来自多个SQL Server实例的大量数据库时,单元测试过程可能会很复杂。 为了直接从SQL Server Management Studio维护,执行和管理单元测试,ApexSQL Unit Test可用作解决方案
答案 2 :(得分:10)
看看this link。它介绍了在SQL Server中创建单元测试存储过程的一些基础知识,以及不同类型的单元测试以及何时应该使用它们。我不确定你使用的是什么DBMS,但很明显这篇文章是针对SQL Server的。
文章被盗:
功能测试
第一个也许是最普遍的 数据库单元测试类是一个 功能测试。在我看来,功能 测试核心功能或API, 如果你愿意 - 你的数据库来自 数据库消费者的观点。 测试数据库的可编程性 对象是这里的主线方案。 所以,测试所有存储过程, 你的内部的功能和触发器 数据库构成功能测试 我脑海。要测试存储过程, 你会执行存储过程 并验证是否是预期的 结果被退回或 发生了适当的行为 但是,您可以测试的不仅仅是 这些类型的对象。您可以 想象想要确保一个视图, 例如,返回适当的 从计算列计算。如 你可以看到,这可能性 境界很大。
架构测试
一个最关键的方面 数据库是它的架构,并进行测试 确保它的行为符合预期 另一个重要的数据库类 单元测试。在这里,你经常会想要 确保视图返回 预期的一组列 适当的数据类型 适当的顺序。你可能想要 确保您的数据库在 事实上,包含1000个表 你期待。
安全测试
在今天这个时代,安全 存储在数据库中的数据 数据库至关重要。因此,另一个 重要的数据库单元测试类 是那些测试数据库的人 安全。在这里,你会想要 确保存在特定用户 你的数据库和它们 分配了适当的权限。 你经常想创造负面的 尝试检索数据的测试 来自受限制的表格或视图 确保访问权限 适当否认。
股票数据测试
许多数据库包含库存数据,或 种子数据。这个数据有所变化 不常用,经常用作 查找应用程序或结束的数据 用户。邮政编码及其相关信息 城市和州是很好的例子 这类数据。因此它是 有用的创建测试,以确保 事实上,您的库存数据确实存在 在你的数据库中。
答案 3 :(得分:4)
我很高兴你问过单元测试,而不是一般的测试。
数据库有许多需要测试的功能。一些例子:
这不仅在您更改数据库中的内容时有用,而且在升级dbms或更改设置中的内容时也很有用。
通常,集成测试已完成。这意味着创建了一个PHP或Java等编程语言的Test Suite,测试会发出一些查询。但是如果某些事情失败了,或者有一些例外,那么理解这个问题就更难了,原因有两个:
因此,在我看来,对于复杂的数据库,您需要使用用SQL编写的单元测试框架(使用存储过程和表)。您必须仔细选择它,因为这种工具没有被广泛使用(因此没有经过广泛测试)。 例如,如果你使用MySQL我就知道这些工具:
答案 4 :(得分:3)
我使用junit / nunit / etc并使用java或c#编写数据库单元测试代码。然后,这些可以在集成服务器上运行,也许使用单独的模式到测试数据库。
最新的oracle sql开发人员带有内置的单元测试框架。我看过这个但是不使用它。它使用GUI来创建和运行测试并将所有测试存储在数据库中,因此不容易将测试用例置于版本控制之下。可能还有其他测试框架,我想它们可能是特定于您的数据库的。
良好做法与常规单元测试类似:
答案 5 :(得分:2)
看看DBTestDriven框架。它对我们很有用。从GitHub或他们的网站下载。
答案 6 :(得分:1)
对于JVM开发,单元测试可以从JDBC抽象中受益:只要知道数据库访问引发了哪些JDBC数据,就可以“重放”这些JDBC数据。
因此可以“重现”数据库访问案例进行测试,无需目标数据库:没有测试/数据隔离复杂性,便于持续集成。
我的框架Acolyte以这种方式是一个有用的框架(包括用于'记录'数据库结果的工作室GUI工具):https://github.com/cchantep/acolyte