服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - 数据库技术 - 为什么你的数据库需要单元测试

为什么你的数据库需要单元测试

2021-08-04 23:02360机房Harris编译 数据库技术

与工作端代码一起创建的数据集定期包含业务基本原理的战略部分。SQL是代码。你应该尽早批准它,而且要彻底批准。

与工作端代码一起创建的数据集定期包含业务基本原理的战略部分。SQL是代码。你应该尽早批准它,而且要彻底批准。

测试金字塔是有助于描述编程测试特征的一种显著表示形式。当您逐步实现更值得注意的段协调时,您将继续从许多确定的、快速的和非接触的测试,转向总体上批准框架的越来越慢的全球测试。这在基本层面上是个好兆头,但是很难澄清单元测试、连接测试和开始到完成测试之间的分离应该如何工作。

为什么你的数据库需要单元测试

结论:在金字塔的哪一层,哪一部分要协调进行对比。您可能会认为数据集在上层有一席之地,因为它的设置和运行成本很高。然而,当它包含需要逐项批准的业务基本原理时,在金字塔中较低的确定阶段协调它也是一个好兆头。它经常需要那种彻底的批准,你不能把它留给几次温和的全球合并测试。然而,我们应该先回顾一下单元测试的含义。

速度、单焦点和隔离

 

在VladimirKhorikov的《单元测试原理、实践和模式》一书中,单元测试的三个必要条件是速度、单中心和断开连接——如果测试不依赖于彼此的状态,它们可以平等运行。单一中心只能找到:作为一个单独的行为单位,而不是一个行为单位。主要方法支持——事实上是请求——被测试类和测试类之间的严格对应,而随后的方法以公共API为中心,基本上不担心批准执行细节。代码单元方法希望您通过使用测试副本(derides和钉子)删除被测试类外部的任何部分。这当然适用于与信息库的所有连接。行为单位法更冷静,当使用真品会降低执行力时,可能会使用测试对。

在检查信息库之前,应该先研究一个模型,在这个模型中,协调单元测试中的弹簧设置是个好兆头。想想这个基本的休息调节器:

假设我们需要批准管理员客户端获得HTTP200响应,非管理员客户端获得401响应。为了测试这一点,我们需要打开一个Spring设置,它不难完成,但比普通的单元测试要慢。这是一个组合测试吗?然而,从专业的角度来看,确实,一个特别细粒度的测试具有单元测试的每一个特征。此外,没有Spring设置的普通单元测试无法以任何方式、形状或形式批准预授权解释中捕获的业务规则。

回到我们的主题:为数据集代码编写相对细粒度的测试是否有利?与使用Spring运行时相比,创建一个类似信息库的库要昂贵得多。这里有一个基本原则来帮助你确定这个选择。一个逐项测试,作为普通形式的一个特性在本地运行,如果有合理的可能性,它可以预防正在进行的基本错误,那么它将始终是有利的。

考虑到我们的批准测试,适当的回答将是“是”。设置错误很容易逃过所有人的注意,并导致重大安全泄漏。通过您自己的努力,提前测试以防止以后的复发对于所有基本的非无关紧要的代码来说都是必须的。集团外部提供并保持的资产条件是另一种情况。你可以更有效地让他们进入从开始到结束的阶段,因为在你的邻居机器上模仿局外人框架通常不会让事情变得糟糕。尽管如此,这些情况并不构成大多数情况。

如果有合理的可能性,逐点测试始终是有利的,它可以预防正在进行的基本错误。

SQL是代码

 

从系统管理和组织的角度来看,您的信息库可能类似于外部依赖,但是,当它与使用它的代码一起创建时,它绝不是您正在构建的框架的一个重要部分。SQL是代码。它阐述了重要的业务原理。它可以将信息库工作者作为透视图、触发器和存放技术,也可以将自己显示为散落在控制代码中的SQL问题,或者狡猾地隐藏在Hibernate标准标点符号中。但是,从长远来看,它是由信息库工作人员破译的,最好是在代码移动到客户端确认环境之前。

与Java相比,信息库驱动的风险投资应用程序中的SQL代码是独一无二的。这绝不是一个解释性的编程模型,它本质上是有状态的和顽强的。承认测试不是一个客户驱动的小黄瓜情境,30个问题的结果是一个非常困难的问题。问题的成败通常取决于数据集的早期条件。当测试不能完全控制此状态时,信息库测试变得异想天开。被测单元越温和,控制这种状态就越简单。

在最后一节中,Psyche也是一个被破译的词。虽然Oracle的put-away方法不可能包含语言结构错误,但Java中粗糙的SQL在数据集上运行时可能会出错。真相终究会揭晓的,所以快吃吧,不要当甜点。

总而言之,没有什么比不彻底测试您的信息库关联更糟糕的了。事实上,我们需要扩展单元测试的含义,以包含运行成本更高的测试,这使得真正的测试能够将一般形式的时间保持在令人满意的范围内。您可以使用的一些技术和系统将在后面的文章中讨论,但是,现在让我总结一下:

组织代码的技巧

 

千万不要把粗糙的SQL和控制原理放在一起。从理论上讲,这些关联隐藏在接口后面,并在测试期间伪造信息库通信。不直接引用SQL的代码不需要依赖运行中的信息库进行测试,并且它不应该对组名中包含SQL的任何内容设置时间条件。

将上面描述的数据集通信的执行放在提交类中,每种技术有一个问题。在这种粒度级别上,编写逐点测试将表格带到理想状态并批准结果要简单得多。

如果您有许多信息基础测试覆盖了许多大纲,请考虑将数据集代码分离成每个模式的独立模块,并使用它们自己的生成和交付。这样,您只需要形成并测试受影响的模块。为了实现这一点,这些模块应该是近似耦合的,模式之间的条件不重要。

运行/维护测试数据库的分步说明

 

在类似的计算机上运行信息库的容器化格式副本。记忆很重要。表单交互处理的是创建和销毁持有者,任何测试套件都不能使数据集处于肮脏的状态。

为了避免对每一个试验做任何准备,请考虑从附近的商店提供一个尖端的复制品,未填写或有限制的测试信息。限制此设备信息的测量。一切都增加了维护负担,而且你还没有进行展览测试。

延伸 · 阅读

精彩推荐