你不知道什么時(shí)候下一個(gè)開發(fā)者會(huì)試圖運(yùn)行你的程序,他可能優(yōu)化或者錯(cuò)誤的刪除一些包含本質(zhì)的行。如果你沒有一個(gè)測試,它就會(huì)失敗,其他的開發(fā)者可能不會(huì)知道他們犯了錯(cuò)誤。
你也可能試圖利用一些常量去替代一些已經(jīng)通過了的測試中調(diào)用的各種各樣的參數(shù),例如,看下面的方法:
Public Function Sum(ByVal x As Integer, ByVal y As Integer, _
ByVal allowNegatives As Boolean) As Integer
If Not allowNegatives Then Throw New Exception()
Return x + y
End Function
你可以打亂代碼去測試覆蓋,這有一些關(guān)于如何測試的變化:
' Try this...
If Not True Then ' replace flag with const
If x < 0 OrElse y < 0 Then Throw New Exception()
End If
' Or this...
If Not allowNegatives Then
' replace check with const
If False OrElse y < 0 Then Throw New Exception()
End If
如果所有的測試依然通過,那么你缺少了一個(gè)測試,另外一個(gè)紅色標(biāo)志是在你為多種相同值測試的檢查。如下:
Assert.AreEqual(3, retval)
一些方法的關(guān)系只看一次(在一個(gè)測試中)意味著你可以安全的返回3作為一個(gè)值,然后所有的針對(duì)這個(gè)方法的測試都將通過,這個(gè)當(dāng)然意味著你丟失了一個(gè)測試。如果你在單元測試中檢查一下代碼,它就很容易被檢查出來。
確保你的測試寫的越簡單越好,一個(gè)單元測試一般不包括一個(gè)if switch或者其他任何的邏輯聲明。如果你發(fā)現(xiàn)你自己在你的測試中寫了一些類似于邏輯聲明的東西,這是一個(gè)好的機(jī)會(huì)來測試一個(gè)以上的事件,在做這樣的操作的時(shí)候,你會(huì)使得你的測試比讀和維護(hù)更加的困難,在生產(chǎn)代碼中同樣如此。保持你的測試簡單,你在生產(chǎn)代碼中發(fā)現(xiàn)bug要?jiǎng)儆谠谀愕膯卧獪y試中。
使測試易于運(yùn)行 如果你的測試并不容易運(yùn)行,那么人們不會(huì)信任它。你的應(yīng)用程序最有可能有下面兩種類型的測試:
• 測試在沒有任何配置的情況下平穩(wěn)的運(yùn)行(這種類型的測試,我們可以在任何的機(jī)器上,在代碼的最終版上或者在源控制上測試,并且做到?jīng)]有任何故障的測試)
• 在運(yùn)行前需要一些配置.
第一種類型是你應(yīng)該模仿的,第二種類型是你通常做的,尤其你如果你是一個(gè)新的單元測試。如果你發(fā)現(xiàn)你自己測試時(shí)有很多的特殊的需求,現(xiàn)在是正常的,但是重要的一點(diǎn)就是你要隔離出兩個(gè)組讓他們能夠單獨(dú)的去做測試。
更多軟考資料請?jiān)L問:考試吧軟件水平考試欄目
希望與更多網(wǎng)友交流,請進(jìn)入考試吧軟件水平考試論壇
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |