為什么你的數(shù)據(jù)庫(kù)需要單元測(cè)試
與工作端代碼一起創(chuàng)建的數(shù)據(jù)集定期包含業(yè)務(wù)基本原理的戰(zhàn)略部分。SQL是代碼。你應(yīng)該盡早批準(zhǔn)它,而且要徹底批準(zhǔn)。
測(cè)試金字塔是有助于描述編程測(cè)試特征的一種顯著表示形式。當(dāng)您逐步實(shí)現(xiàn)更值得注意的段協(xié)調(diào)時(shí),您將繼續(xù)從許多確定的、快速的和非接觸的測(cè)試,轉(zhuǎn)向總體上批準(zhǔn)框架的越來(lái)越慢的全球測(cè)試。這在基本層面上是個(gè)好兆頭,但是很難澄清單元測(cè)試、連接測(cè)試和開(kāi)始到完成測(cè)試之間的分離應(yīng)該如何工作。
結(jié)論:在金字塔的哪一層,哪一部分要協(xié)調(diào)進(jìn)行對(duì)比。您可能會(huì)認(rèn)為數(shù)據(jù)集在上層有一席之地,因?yàn)樗脑O(shè)置和運(yùn)行成本很高。然而,當(dāng)它包含需要逐項(xiàng)批準(zhǔn)的業(yè)務(wù)基本原理時(shí),在金字塔中較低的確定階段協(xié)調(diào)它也是一個(gè)好兆頭。它經(jīng)常需要那種徹底的批準(zhǔn),你不能把它留給幾次溫和的全球合并測(cè)試。然而,我們應(yīng)該先回顧一下單元測(cè)試的含義。
速度、單焦點(diǎn)和隔離
在VladimirKhorikov的《單元測(cè)試原理、實(shí)踐和模式》一書(shū)中,單元測(cè)試的三個(gè)必要條件是速度、單中心和斷開(kāi)連接——如果測(cè)試不依賴(lài)于彼此的狀態(tài),它們可以平等運(yùn)行。單一中心只能找到:作為一個(gè)單獨(dú)的行為單位,而不是一個(gè)行為單位。主要方法支持——事實(shí)上是請(qǐng)求——被測(cè)試類(lèi)和測(cè)試類(lèi)之間的嚴(yán)格對(duì)應(yīng),而隨后的方法以公共API為中心,基本上不擔(dān)心批準(zhǔn)執(zhí)行細(xì)節(jié)。代碼單元方法希望您通過(guò)使用測(cè)試副本(derides和釘子)刪除被測(cè)試類(lèi)外部的任何部分。這當(dāng)然適用于與信息庫(kù)的所有連接。行為單位法更冷靜,當(dāng)使用真品會(huì)降低執(zhí)行力時(shí),可能會(huì)使用測(cè)試對(duì)。
在檢查信息庫(kù)之前,應(yīng)該先研究一個(gè)模型,在這個(gè)模型中,協(xié)調(diào)單元測(cè)試中的彈簧設(shè)置是個(gè)好兆頭。想想這個(gè)基本的休息調(diào)節(jié)器:
假設(shè)我們需要批準(zhǔn)管理員客戶(hù)端獲得HTTP200響應(yīng),非管理員客戶(hù)端獲得401響應(yīng)。為了測(cè)試這一點(diǎn),我們需要打開(kāi)一個(gè)Spring設(shè)置,它不難完成,但比普通的單元測(cè)試要慢。這是一個(gè)組合測(cè)試嗎?然而,從專(zhuān)業(yè)的角度來(lái)看,確實(shí),一個(gè)特別細(xì)粒度的測(cè)試具有單元測(cè)試的每一個(gè)特征。此外,沒(méi)有Spring設(shè)置的普通單元測(cè)試無(wú)法以任何方式、形狀或形式批準(zhǔn)預(yù)授權(quán)解釋中捕獲的業(yè)務(wù)規(guī)則。
回到我們的主題:為數(shù)據(jù)集代碼編寫(xiě)相對(duì)細(xì)粒度的測(cè)試是否有利?與使用Spring運(yùn)行時(shí)相比,創(chuàng)建一個(gè)類(lèi)似信息庫(kù)的庫(kù)要昂貴得多。這里有一個(gè)基本原則來(lái)幫助你確定這個(gè)選擇。一個(gè)逐項(xiàng)測(cè)試,作為普通形式的一個(gè)特性在本地運(yùn)行,如果有合理的可能性,它可以預(yù)防正在進(jìn)行的基本錯(cuò)誤,那么它將始終是有利的。
考慮到我們的批準(zhǔn)測(cè)試,適當(dāng)?shù)幕卮饘⑹?ldquo;是”。設(shè)置錯(cuò)誤很容易逃過(guò)所有人的注意,并導(dǎo)致重大安全泄漏。通過(guò)您自己的努力,提前測(cè)試以防止以后的復(fù)發(fā)對(duì)于所有基本的非無(wú)關(guān)緊要的代碼來(lái)說(shuō)都是必須的。集團(tuán)外部提供并保持的資產(chǎn)條件是另一種情況。你可以更有效地讓他們進(jìn)入從開(kāi)始到結(jié)束的階段,因?yàn)樵谀愕泥従訖C(jī)器上模仿局外人框架通常不會(huì)讓事情變得糟糕。盡管如此,這些情況并不構(gòu)成大多數(shù)情況。
如果有合理的可能性,逐點(diǎn)測(cè)試始終是有利的,它可以預(yù)防正在進(jìn)行的基本錯(cuò)誤。
SQL是代碼
從系統(tǒng)管理和組織的角度來(lái)看,您的信息庫(kù)可能類(lèi)似于外部依賴(lài),但是,當(dāng)它與使用它的代碼一起創(chuàng)建時(shí),它絕不是您正在構(gòu)建的框架的一個(gè)重要部分。SQL是代碼。它闡述了重要的業(yè)務(wù)原理。它可以將信息庫(kù)工作者作為透視圖、觸發(fā)器和存放技術(shù),也可以將自己顯示為散落在控制代碼中的SQL問(wèn)題,或者狡猾地隱藏在Hibernate標(biāo)準(zhǔn)標(biāo)點(diǎn)符號(hào)中。但是,從長(zhǎng)遠(yuǎn)來(lái)看,它是由信息庫(kù)工作人員破譯的,最好是在代碼移動(dòng)到客戶(hù)端確認(rèn)環(huán)境之前。
與Java相比,信息庫(kù)驅(qū)動(dòng)的風(fēng)險(xiǎn)投資應(yīng)用程序中的SQL代碼是獨(dú)一無(wú)二的。這絕不是一個(gè)解釋性的編程模型,它本質(zhì)上是有狀態(tài)的和頑強(qiáng)的。承認(rèn)測(cè)試不是一個(gè)客戶(hù)驅(qū)動(dòng)的小黃瓜情境,30個(gè)問(wèn)題的結(jié)果是一個(gè)非常困難的問(wèn)題。問(wèn)題的成敗通常取決于數(shù)據(jù)集的早期條件。當(dāng)測(cè)試不能完全控制此狀態(tài)時(shí),信息庫(kù)測(cè)試變得異想天開(kāi)。被測(cè)單元越溫和,控制這種狀態(tài)就越簡(jiǎn)單。
在最后一節(jié)中,Psyche也是一個(gè)被破譯的詞。雖然Oracle的put-away方法不可能包含語(yǔ)言結(jié)構(gòu)錯(cuò)誤,但Java中粗糙的SQL在數(shù)據(jù)集上運(yùn)行時(shí)可能會(huì)出錯(cuò)。真相終究會(huì)揭曉的,所以快吃吧,不要當(dāng)甜點(diǎn)。
總而言之,沒(méi)有什么比不徹底測(cè)試您的信息庫(kù)關(guān)聯(lián)更糟糕的了。事實(shí)上,我們需要擴(kuò)展單元測(cè)試的含義,以包含運(yùn)行成本更高的測(cè)試,這使得真正的測(cè)試能夠?qū)⒁话阈问降臅r(shí)間保持在令人滿意的范圍內(nèi)。您可以使用的一些技術(shù)和系統(tǒng)將在后面的文章中討論,但是,現(xiàn)在讓我總結(jié)一下:
組織代碼的技巧
千萬(wàn)不要把粗糙的SQL和控制原理放在一起。從理論上講,這些關(guān)聯(lián)隱藏在接口后面,并在測(cè)試期間偽造信息庫(kù)通信。不直接引用SQL的代碼不需要依賴(lài)運(yùn)行中的信息庫(kù)進(jìn)行測(cè)試,并且它不應(yīng)該對(duì)組名中包含SQL的任何內(nèi)容設(shè)置時(shí)間條件。
將上面描述的數(shù)據(jù)集通信的執(zhí)行放在提交類(lèi)中,每種技術(shù)有一個(gè)問(wèn)題。在這種粒度級(jí)別上,編寫(xiě)逐點(diǎn)測(cè)試將表格帶到理想狀態(tài)并批準(zhǔn)結(jié)果要簡(jiǎn)單得多。
如果您有許多信息基礎(chǔ)測(cè)試覆蓋了許多大綱,請(qǐng)考慮將數(shù)據(jù)集代碼分離成每個(gè)模式的獨(dú)立模塊,并使用它們自己的生成和交付。這樣,您只需要形成并測(cè)試受影響的模塊。為了實(shí)現(xiàn)這一點(diǎn),這些模塊應(yīng)該是近似耦合的,模式之間的條件不重要。
運(yùn)行/維護(hù)測(cè)試數(shù)據(jù)庫(kù)的分步說(shuō)明
在類(lèi)似的計(jì)算機(jī)上運(yùn)行信息庫(kù)的容器化格式副本。記憶很重要。表單交互處理的是創(chuàng)建和銷(xiāo)毀持有者,任何測(cè)試套件都不能使數(shù)據(jù)集處于骯臟的狀態(tài)。
為了避免對(duì)每一個(gè)試驗(yàn)做任何準(zhǔn)備,請(qǐng)考慮從附近的商店提供一個(gè)尖端的復(fù)制品,未填寫(xiě)或有限制的測(cè)試信息。限制此設(shè)備信息的測(cè)量。一切都增加了維護(hù)負(fù)擔(dān),而且你還沒(méi)有進(jìn)行展覽測(cè)試。