第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

TDD:測(cè)試用例的適用性

TDD:測(cè)試用例的適用性

FFIVE 2022-10-20 17:32:12
我從 TDD 和 JUnit 開(kāi)始。在查看教程和文檔后,我有一些問(wèn)題,如果我能得到一些最佳實(shí)踐反饋,我會(huì)很高興。A)我看到的所有示例都是針對(duì)具有某種語(yǔ)義/邏輯的方法。輸入->邏輯->輸出例如 2 個(gè)數(shù)字 -> 添加它們 -> 結(jié)果由于輸入到輸出的轉(zhuǎn)換,測(cè)試用例檢查邏輯。我明白這一點(diǎn),它很好。如果沒(méi)有這樣的輸入(或者對(duì)外部結(jié)果有很大的依賴)怎么辦?例如String getName (int id) {   // read the name of a staffmember out of the DB and return it   }我沒(méi)有看到可以在編譯/部署時(shí)檢查上下文無(wú)關(guān)的真正邏輯。什么斷言是有意義的,或者是一個(gè)沒(méi)有測(cè)試是公平的樣本?我認(rèn)為只有對(duì)上下文獨(dú)立輸入的測(cè)試才有意義。外部數(shù)據(jù)庫(kù)或網(wǎng)絡(luò)請(qǐng)求的結(jié)果不是(我認(rèn)為 - 你同意嗎?)。B)你們認(rèn)為“方法存在”與“帶有測(cè)試用例的方法”的比率是多少?當(dāng)然這取決于項(xiàng)目或主題,但我會(huì)對(duì)一些數(shù)字感興趣。
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

正如 deHaar 在他的評(píng)論中指出的那樣,您想要涵蓋許多邊緣情況。在測(cè)試數(shù)據(jù)庫(kù)時(shí),可以執(zhí)行以下操作:

  • 您模擬數(shù)據(jù)庫(kù)(在您的存儲(chǔ)庫(kù)中的 Spring 項(xiàng)目中),并將其配置為返回/拋出。然后在您的測(cè)試中,您測(cè)試以下內(nèi)容:givenNoCustomerInDB_thenNotFoundExceptionThrownIsWrappedToXXX(). 在這里,您將測(cè)試調(diào)用數(shù)據(jù)庫(kù)的服務(wù)方法是否捕獲異常并相應(yīng)地包裝它。對(duì)于這種方法,您可能需要查找 Mockito,它是 Java 的“事實(shí)上的”模擬框架。

  • 另一種選擇是在進(jìn)行測(cè)試時(shí)使用內(nèi)存數(shù)據(jù)庫(kù)(例如 H2)。

要記住的一件事:您有責(zé)任確保模擬(或 H2)表現(xiàn)得像您的真實(shí)數(shù)據(jù)庫(kù)。@Kraylog 建議將適配器寫入 IO 設(shè)備的集成測(cè)試,以及確保模擬行為相同的合同測(cè)試。


查看完整回答
反對(duì) 回復(fù) 2022-10-20
?
蝴蝶刀刀

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊

首先,雖然大多數(shù)函數(shù)都可以進(jìn)行測(cè)試,但并非所有函數(shù)都需要直接測(cè)試。通過(guò)調(diào)用代碼的測(cè)試可以更好地測(cè)試一些。

其次,在處理依賴于狀態(tài)的副作用或代碼時(shí),有一些方法可以創(chuàng)建測(cè)試特定場(chǎng)景所需的上下文。其中一種方法是使用test doubles

當(dāng)然,我們需要對(duì)不是純函數(shù)的代碼進(jìn)行測(cè)試。您可以盡量減少非純函數(shù)的代碼量(例如使用函數(shù)式編程),但如果您不這樣做,那么您的其余代碼也需要進(jìn)行測(cè)試。

最后,您所說(shuō)的“比率”或通常所說(shuō)的“測(cè)試覆蓋率”取決于您對(duì)測(cè)試套件的信心水平。最后,正是這種信心使您可以重構(gòu)代碼而不必?fù)?dān)心破壞事物,這最終才是重點(diǎn)。


查看完整回答
反對(duì) 回復(fù) 2022-10-20
?
慕姐4208626

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊

在將測(cè)試對(duì)象與其通常環(huán)境隔離的測(cè)試中,您會(huì)input -> logic -> output經(jīng)??吹竭@種模式,因?yàn)檩斎霐?shù)據(jù)必須由環(huán)境提供,而測(cè)試是對(duì)象所經(jīng)歷的環(huán)境。


TDD經(jīng)常使用孤立的測(cè)試;它們通常既快速又令人尷尬地并行,這意味著在設(shè)計(jì)階段運(yùn)行它們具有較低的機(jī)會(huì)成本。


String getName (int id)

{

    // read the name of a staffmember out of the DB and return it

在像這樣的示例中,我們通常會(huì)被驅(qū)使設(shè)計(jì)“該”數(shù)據(jù)庫(kù)是可配置的,并且在我們的測(cè)試中,我們將提供預(yù)加載到正確狀態(tài)的內(nèi)存數(shù)據(jù)庫(kù)。


// Copy input to database

// connect test subject to database

// invoke query, thereby retrieving the output

是一樣的圖案,只是雕刻的不同。


在許多情況下,我們可以在我們的設(shè)計(jì)中為數(shù)據(jù)庫(kù)引入一些抽象,并使該抽象而不是數(shù)據(jù)庫(kù)成為配置的依賴項(xiàng)。因此,與其使用與數(shù)據(jù)庫(kù)對(duì)話的抽象,不如使用更簡(jiǎn)單的實(shí)現(xiàn),通過(guò)硬編碼來(lái)返回一些值。


這樣的事情有時(shí)被稱為測(cè)試替身。


// Use the input to initialize the test double

// connect test subject to test double

// invoke query, thereby retrieving the output

同樣的模式再次出現(xiàn),“邏輯”的細(xì)節(jié)發(fā)生了一些變化。


logicofinput -> logic -> output不一定是您的生產(chǎn)代碼。編寫與一個(gè)外觀集成的測(cè)試是很常見(jiàn)的,該外觀協(xié)調(diào)測(cè)試主體與其(雙重)依賴關(guān)系之間的交互協(xié)議。


(測(cè)試,就像生產(chǎn)代碼一樣,有設(shè)計(jì)——現(xiàn)在投資一個(gè)好的設(shè)計(jì)可能會(huì)在測(cè)試的整個(gè)生命周期內(nèi)產(chǎn)生可觀的利潤(rùn))。


查看完整回答
反對(duì) 回復(fù) 2022-10-20
  • 3 回答
  • 0 關(guān)注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)