單位測試 是第一道防線,這一層級的保護至關(guān)重要,因為它為下列測試過程奠定了基礎(chǔ):集成測試、驗收測試,最后是手動測試,包括探索性測試。
在本文中,我將介紹單元測試與其他方法的區(qū)別,并將提供不進行單元測試時我們能夠或不能夠做到的例子。我們還會談到?自動化測試 ,這對確保代碼的可靠性和質(zhì)量起著重要作用。
單位測試
單元測試的思想是為每個不重要的功能或方法編寫測試。這使它能夠快速檢查最近的代碼更改是否造成了回歸,這意味著已經(jīng)測試過的程序的一些部分出現(xiàn)了錯誤,這也使檢測和修復(fù)這些錯誤變得更加容易。
當(dāng)單元測試過多時
任何沒有適當(dāng)測試覆蓋的長期項目遲早會被重新編寫。單元測試對于大多數(shù)項目來說是必不可少的,但也有可能忽略這一步驟的情況。例如,您正在為演示目的創(chuàng)建一個項目。時間安排很難。您的系統(tǒng)是硬件和軟件的組合,在項目開始時,還不完全清楚最終產(chǎn)品的樣子。軟件將在展覽或展示期間運行1-2天。在這種情況下,沒有必要實現(xiàn)單元測試。
另一個例子是當(dāng)你在一個廣告網(wǎng)站,或簡單的閃存游戲,或旗幟,涉及復(fù)雜的布局,動畫和大量靜態(tài)內(nèi)容。以上所有內(nèi)容均適用于介紹。
如果您正在構(gòu)建一個簡單的名片網(wǎng)站,網(wǎng)站上有一套靜態(tài)HTML頁面和單一的電子郵件提交表格,不需要單元測試??蛻艉芸赡軐@個滿意,不再需要任何東西了。最有可能的是,手動檢查和測試所有東西會更快。
單元測試實施
在計劃單元測試時,記住您的目標(biāo)是確保您的單元測試代碼覆蓋率超過80%。這意味著在運行單元測試時至少執(zhí)行80%的代碼庫。因此,要開始將單元測試整合到您的開發(fā)過程中,請嘗試通過下面的步驟。
1.選擇合適的測試架構(gòu)
選擇一個適合你需要的框架,而不是重新設(shè)計車輪。例如,許多?.網(wǎng) 開發(fā)人員使用MSTST是因為它帶有可視化工作室,但是N單元或X單元可能為您的項目提供更好的功能。
2.決定測試什么
并非所有代碼都需要測試。簡單的、無依賴性的代碼可能不需要測試,而具有許多依賴性的復(fù)雜代碼可能在測試前受益于重構(gòu)。重點測試復(fù)雜的、算法代碼和相互依存的組件,以確保清晰的交互和集成。
3.保持測試結(jié)構(gòu)的一致性
使用"安排"、"行動"、"斷言"模式來實現(xiàn)清晰性和可維護性。
4.一次測試一件事
每個測試只需驗證代碼的一個方面。對于復(fù)雜的過程,將它們分成較小的部分并分別測試。
5.用假貨處理依賴關(guān)系
用假實現(xiàn)替換真實的依賴關(guān)系,以避免測試不必要的組件。使用存根進行預(yù)先定義的響應(yīng)和模擬以驗證交互。
6.使用隔離框架
使用現(xiàn)有的框架,比如Moq或犀牛嘲笑來創(chuàng)建嘲笑和存根,而不是編寫自己的。這減少了錯誤和維護開銷。
7.可測試性設(shè)計
最初編寫代碼時要考慮到可測試性。使用依賴項注入,避免在方法中直接實例化對象,并盡量減少使用靜態(tài)方法和邏輯構(gòu)造函數(shù)。
8.重構(gòu)遺留代碼
如果處理不可測試的遺留代碼,從重構(gòu)小的、可管理的部分開始,并在編寫單元測試之前用集成和驗收測試來覆蓋它們。逐步將這一過程擴大到代碼庫的更大部分。
自動化測試
這個方法的名稱是不言而喻的:在自動化測試中,測試用例是自動執(zhí)行的。它發(fā)生的速度比手動測試快得多,甚至可以在夜間進行,因為整個過程最少需要人為干擾。當(dāng)你需要快速的反饋時,這種方法是絕對改變游戲的。然而,與任何自動化一樣,在最初的設(shè)置階段,它可能需要大量的時間和財政資源。盡管如此,它完全值得使用,因為它將使整個過程更加高效,代碼更加可靠。
自動化測試實施
這里的第一步是了解項目是否包含測試自動化。您需要確保項目有一個健壯的測試自動化框架。反過來,自動化工程師應(yīng)精通工具棧(例如:遵守既定的自動化準則。
1.與手動測試相比的自動化覆蓋率
努力使高比例的測試用例實現(xiàn)自動化,最好超過90%,以最大限度地提高效率,減少對手動測試的依賴。
2.項目概覽和自動化實施
自動化測試一直是一個大型項目,涉及多個團隊開發(fā)共享產(chǎn)品,每個團隊中都有手動質(zhì)量保證測試人員。測試集中在前端和后端方面。
3.了解項目
首先,我們需要了解產(chǎn)品的目的和用戶。這有助于確定自動化工作的優(yōu)先次序。例如,如果產(chǎn)品是為企業(yè)服務(wù)的,那么就把重點放在測試法律合規(guī)性和支付交易上。對于面向消費者的產(chǎn)品,優(yōu)先考慮關(guān)鍵操作,如卡到卡轉(zhuǎn)移和服務(wù)支付。自動化應(yīng)全面應(yīng)用于整個產(chǎn)品,而不僅僅是單個團隊。
4.確定主要利益攸關(guān)方
熟悉所有利益相關(guān)者是至關(guān)重要的,因為與他們的互動是必要的。主要人員包括:
· 產(chǎn)品所有者 :他們是自動化的客戶,并確定其要求。
· 質(zhì)量保證工程師 :他們是自動化工具的最終用戶,他們的滿意程度是成功的衡量標(biāo)準。
· 手動測試引線 :他們幫助組織過程,并協(xié)調(diào)手動測試。
· 前沿發(fā)展領(lǐng)導(dǎo) :它們影響自動化測試的穩(wěn)定性和質(zhì)量。
· 采購專家 :他們處理硬件分配,主要是服務(wù)器設(shè)備。
5.諒解小組
收集關(guān)于每個團隊的項目范圍的信息,無論它包括前置、后端還是兩者。了解質(zhì)量保證團隊如何測試他們的部門和他們對自動化的熟悉程度。確定測試挑戰(zhàn)和自動化領(lǐng)域的優(yōu)先次序。
6.制定自動化要求
在大多數(shù)情況下,我們的目標(biāo)是采取一種沒有創(chuàng)新解決辦法的經(jīng)典辦法:
· 編程語言 :為聘用專家提供便利
· 前置測試
· 后端測試 :使用?安全的 休息時的互動。
· 數(shù)據(jù)庫測試 :用于標(biāo)準的Java圖書館
· 自動化測試 :為培訓(xùn)手冊質(zhì)量保證測試人員和降低成本選擇黃瓜。
· 報告 :最后,但并非最不重要的是,使用吸引力的和信息豐富的報告。
7.演示和登機
為所有的利益相關(guān)者,包括產(chǎn)品所有者,質(zhì)量保證工程師,開發(fā)人員和分析師進行演示,重點是清晰度。從前端團隊開始創(chuàng)建可見的結(jié)果。開發(fā)5-10個自動化測試,記錄它們,并使用圖解顯示結(jié)果。說明了自動化基礎(chǔ)設(shè)施、主要目標(biāo)和效果,并比較了手動和自動化測試.
8.為自動化準備用戶界面
為確??煽亢头€(wěn)定的自動測試,增加"data-test-id 在前端領(lǐng)導(dǎo)和產(chǎn)品所有者的合作下,集中屬性到UI元素。這一實踐大大提高了測試的可靠性,因為它使測試不受UI元素位置或內(nèi)容的改變的影響。
9.開發(fā)自動化測試
在自動化測試人員之間分配任務(wù)。使用模板創(chuàng)建自動化項目框架。準備步驟進行正面測試,使這些步驟可在各個項目中重復(fù)使用,并設(shè)置了月球和詹金斯。通過建立存儲庫,創(chuàng)建詹金斯工作,以及在GIT和開發(fā)環(huán)境中培訓(xùn)質(zhì)量保證,將團隊整合到自動化中。
然后,質(zhì)量保證手動測試人員將編寫他們的自動化測試,由自動化工程師進行審查和集成。最后的步驟開發(fā)將發(fā)生在業(yè)余時間的短跑。在每個沖刺結(jié)束時,展示結(jié)果并在產(chǎn)品演示中宣布新的功能。
結(jié)論
如您所見,單元測試和自動化測試是相輔相成的。通過每天使用它們來識別缺陷,可以減少每個階段的回歸測試時間。此外,這將逐步導(dǎo)致產(chǎn)品更快地投入生產(chǎn),從而節(jié)省時間和資源。