作為一個簡單的練習,如果你理解了上例中Calc分列方法的用法,你很可能可以進行很好的推測,但是他可以簡單的作為人員數(shù)量的用例使得輸出結果為1000:
• 在組中返回最大的負數(shù)作為一個正數(shù)。
• 如果數(shù)字是負數(shù)且返回值為剩下幾個數(shù)的總和作為一個正數(shù),那么忽略第一個數(shù)字。
• 返回相互作乘積運算而得的數(shù)字。
現(xiàn)在請參考下面在單元測試之中的小改動:
<TestMethod()> _
Public Sub Parse_NegativeFirstNum_ReturnsSumOfTheRestAsPositive()
Dim c As New Calc
Dim parsedSumResult As Integer = c.Parse("-1", "-1000")
Const SUM_WITH_IGNORED_FIRST_NUM As Integer = 1000
Assert.AreEqual(SUM_WITH_IGNORED_FIRST_NUM, parsedSumResult)
End Sub
這個是不是比較容易理解呢?當聲明消息消失之后,表達意圖最合適的地方就是測試的名字。 如果你廣泛的使用了它,你將會發(fā)現(xiàn)你不再需要讀測試代碼就能明白代碼測試的目的所在。事實上,你經(jīng)常根本不需要寫任何注釋,因為代碼,特別是那些帶著實例的,他們自己是證明自己的。
名字包含了三部分內(nèi)容: 測試下方法的名字(解析),測試下的狀態(tài)或者規(guī)則(帶著第一個負數(shù)傳遞一個字符串),以及預期的輸出或者運行情況(剩余數(shù)字的總和以一個正數(shù)的形式返回)。需要注意的是我從名稱中將Test以及Calc這兩個詞刪除。我已經(jīng)知道這是一個屬性的測試因此在此沒有重復此信息的必要。我也知道這是一個在Calc類中的測試因為測試類經(jīng)常是寫給一個特殊類的(這個類也許已經(jīng)被命名為CalcTests)。
名字也許會很長,但是又有誰在乎呢?它讀起來更像是一個標準英語的句子而且它使得一個新來的開發(fā)者更容易明白測試的內(nèi)容。更是這樣,當這個測試發(fā)生故障時,我們甚至不需要調(diào)試代碼就可以知道問題究竟出在哪里。
需要注意的是,我已經(jīng)在前面分別實際演示了通過在不同行中創(chuàng)建一個結果變量的方法從聲明操作中進行分解操作。這樣做至少有兩個理由。第一個理由是,你可以為一個變量分配一個可讀性強的名字,它可以包含結果,這樣可以使你的聲明行非常易于理解以及易于讀。第二點是,測試下與對象相反的invocation 可能非常的長,它可能會使你的聲明行延伸出屏幕的邊緣之外,這樣導致測試者向右滾屏。就我個人而言,我認為這個是非常惱人的。
我在我的測試中使用了很多常量以確保我的聲明讀起來像一本書。在先前的例子之中,你可以讀到聲明中說:“確保分解總數(shù)是與忽略第一個數(shù)后所得總和是相等的! 為你的變量取一個很好的名字能夠在某些程度上彌補對于測試的命名不足。
當然,有時一個聲明 消息是在一個單元測試中傳遞intent的最好的方法。 一個好的聲明消息始終能夠解釋什么因該會發(fā)生或者什么發(fā)生了而且為什么會出錯。舉個例子來說,“分列應該忽略掉第一個數(shù)字如果這個數(shù)字是個負數(shù)的話”,“分列不能夠忽略掉第一個負數(shù)”,還有“X調(diào)用對象Y標記錯誤”這些都是有用的聲明消息,它們很清晰的描述了結果的情況。
在你的設置方法中避免部分相關的代碼
一個<TestInitialize()> 方法是樣例成員變量在測試中使用的一個好地方。你所有的測試,只有在一部分的測試中避免變量。他們可以為測試設置本地變量。如果你創(chuàng)建了部分相關的實例作為類的成員,用來在測試中簡單的避免創(chuàng)建的副本,你應該使用在文章前面解釋的工廠方法,使用部分相關變量使得你的代碼和設置方法缺少易讀性。一旦變量在一個或者每個測試中使用,那么他應該是<TestInitialize()> 方法的一個成員和變量。
Figure 5 展現(xiàn)了一個擁有兩個成員變量的類的測試。但是他們中的一個(cxNum)只被部分使用。Figure 6 展現(xiàn)了如何在測試中替換代碼從而使它更加易讀的方法。
更多軟考資料請訪問:考試吧軟件水平考試欄目
希望與更多網(wǎng)友交流,請進入考試吧軟件水平考試論壇
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |