当前位置: 首页 > 科技观察

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

时间:2023-03-13 00:30:58 科技观察

与工作端代码一起创建的数据集通常包含战略性业务原理。SQL是代码。你应该尽早彻底地批准它。测试金字塔是一种显着表示,有助于表征编程测试。随着您朝着更重要的细分市场协调迈进,您将继续从许多确定性、快速和非接触式测试转向总体上越来越慢的全球批准框架测试。这在基本层面上是一个好兆头,但很难阐明单元测试、连接测试和开始到结束测试之间的分离应该如何工作。结论:在金字塔的哪一层,应该协调哪一部分进行比较。您可能认为数据集在上层占有一席之地,因为它的设置和运行成本很高。但是,当它包含需要逐项批准的业务原理时,在金字塔的较低确定性阶段对其进行协调也是一个好兆头。它通常需要那种全面的批准,你不能把它留给几个温和的全球合并测试。但是,我们应该首先回顾一下单元测试的含义。速度、单一焦点和隔离在弗拉基米尔·霍里科夫(VladimirKhorikov)的《单元测试原理、实践和模式》一书中,单元测试的三个必备条件是速度、单一焦点和断开连接——如果它们不依赖于彼此的状态,测试可以平等地运行。只能找到一个单一的中心:作为一个单一的行动单位,而不是作为一个行动单位。main方法支持——实际上是请求——被测类与被测类之间的严格对应关系,而后续方法则以公共API为中心,基本不用担心审批实现细节。代码单元方法希望您通过使用测试副本(derides和pegs)删除正在测试的类之外的任何部分。这当然适用于与存储库的所有连接。行为单元方法更酷,当使用真实时可以使用测试对会减少执行。在检查存储库之前,应该调查一个模型,其中在单元测试中协调spring设置是一个好兆头。想想这个基本的REST调节器:假设我们需要批准管理员客户端获得HTTP200响应,而非管理员客户端获得401响应。要对此进行测试,我们需要打开一个Spring设置,这并不难,但比正常的单元测试要慢。这是复合测试吗?但是,从专业的角度来看,确实,特别细粒度的测试具有单元测试的所有特性。此外,没有Spring设置的普通单元测试不能以任何方式、形状或形式批准预授权解释中捕获的业务规则。回到我们的主题:为数据集代码编写相对细粒度的测试是否有益?创建类似存储库的存储库比使用Spring运行时要昂贵得多。这是帮助您确定此选择的基本原则。如果有合理的可能性可以防止正在进行的基本错误,则作为通用形式的功能在本地运行的个案测试将始终是有利的。考虑到我们的批准测试,适当的答案是“是”。一个设置错误很容易从所有人的视线中溜走,并导致重大的安全漏洞。通过您自己的努力,提前测试以防止以后复发是所有基本的重要代码的必要条件。集团外提供和维护的资产情况则另当别论。您可以更有效地从头到尾让它们进入,因为在您邻居的机器上模仿外部框架通常不会让事情变糟。尽管如此,这些案例并不构成大多数案例。如果有合理的可能性防止正在进行的基本错误,则逐点测试总是有利的。SQL是代码从系统管理和组织的角度来看,您的存储库可能类似于外部依赖项,但是,当它与使用它的代码一起创建时,它绝不是您正在构建的框架的重要组成部分。SQL是代码。它涉及重要的商业原则。它可以将存储库工作人员呈现为透视图、触发器和存储技术,或者它可以将自己显示为散布在控制代码中的SQL问题,或者巧妙地隐藏在Hibernate标准标点符号中。但是,从长远来看,它会被存储库人员破译,最好是在将代码移至客户端确认环境之前。与Java相比,存储库驱动的VC应用程序中的SQL代码是独一无二的。这绝不是一种解释型编程模型,它本质上是有状态和顽强的。承认测试不是客户驱动的小黄瓜情况,30题的结果是非常困难的。问题的成败往往取决于数据集的早期状况。当测试不能完全控制这种状态时,存储库测试就会变得异想天开。被测单元越良性,控制这种状态就越简单。在最后一节中,Psyche也是一个破译的词。虽然Oracle的存储方法不太可能包含语言构造错误,但在数据集上运行时,Java中的原始SQL可能会出错。真相终究会水落石出,所以抓住它,而不是甜点。总而言之,没有比不彻底测试您的存储库关联更糟糕的了。事实上,我们需要将单元测试的含义扩展到包括运行成本更高的测试,这使得真正的测试有可能将一般形式时间保持在令人满意的范围内。您可以使用的一些技术和系统将在以后的文章中讨论,但现在让我总结一下:组织代码的诀窍是永远不要将原始SQL和控制原则放在一起。理论上,这些关联在测试期间隐藏在接口和虚假存储库通信的后面。不直接引用SQL的代码不需要依赖正在运行的存储库进行测试,并且不应在组名中包含SQL的任何内容上设置时间条件。将上面描述的数据集通信的执行放在提交类中,每个技术都有一个问题。在此粒度级别上,编写逐点测试以使表达到所需状态并批准结果要简单得多。如果您有许多信息库测试涵盖的许多大纲,请考虑将数据集代码分离到每个模式的单独模块中,并自行生成和交付。这样,您只需要构建和测试受影响的模块。为了实现这一点,模块应该近似耦合,模式之间的条件并不重要。运行/维护测试数据库的分步说明在类似机器上运行存储库的容器化副本。记忆力很重要。表单交互处理创建和销毁持有者,没有测试套件可以让数据集处于脏状态。为避免为每次测试做任何准备,请考虑提供附近商店的尖端复制品,其中包含未填写或有限的测试信息。限制此设备信息的测量。一切都增加了维护负担,而且您还没有进行展览测试。