单元测试技巧:创建描述性测试
您的單元測(cè)試應(yīng)盡可能具有描述性。 他們給您的反饋應(yīng)該非常清楚,您甚至不需要啟動(dòng)調(diào)試器并一步一步地檢查代碼來(lái)檢查局部變量。 為什么? 因?yàn)槟切枰獣r(shí)間,而且我們很懶,對(duì)嗎? 為此,您需要?jiǎng)?chuàng)建描述性測(cè)試。 有多種實(shí)現(xiàn)方法。 這是其中兩個(gè)。
添加斷言消息
通常可以將斷言消息指定為測(cè)試斷言中的附加參數(shù),并且在該特定測(cè)試用例失敗時(shí),它們會(huì)作為失敗消息出現(xiàn)。
例如,在jUnit中,您可以指定斷言消息,例如:
assertEquals("The firstname of the two people should match if the clone was successful", "Fritz", person1.getFirstname());另一方面,在MSTest中,必須將斷言消息作為最后一個(gè)參數(shù)添加。
Assert.AreEqual("Fritz", person1.Firstname, "The firstname of the two people should match if the clone was successful");注意 ,不要“過(guò)度設(shè)計(jì)”。 我將這些注釋與其他代碼注釋類(lèi)似地對(duì)待:如果它們添加了有意義的信息,則只需添加它們即可。 否則,它們就是浪費(fèi),因此就這樣對(duì)待它們。
首選顯式斷言
我所說(shuō)的顯式斷言的意思是對(duì)執(zhí)行的操作使用正確的斷言。 例如,如果您需要像前面提到的斷言中那樣執(zhí)行相等性檢查,請(qǐng)不要使用布爾斷言語(yǔ)句。 (這里是一個(gè)虛擬的QUnit測(cè)試用例的示例)
test('Should correctly clone two people', 1, function(){//...ok(person1.firstname === 'Fritz', 'I expect both names to match if the clone operation succeeded'); });…以及相應(yīng)的結(jié)果在輸出窗口中:
這個(gè)結(jié)果并不是真正的描述性…
結(jié)果沒(méi)有告訴我們太多,對(duì)吧? 您可以說(shuō)的是,此人的名字與您期望的名字不匹配,因此克隆操作可能不會(huì)成功。 但為什么?? 那它的實(shí)際價(jià)值是多少?
使用equals代替:
test('Should correctly clone two people', 1, function(){//...equal(person1.firstname, 'Fritz', 'I expect both names to match if the clone operation succeeded'); });……結(jié)果又是:
哦,看那里,有描述性的結(jié)果。
現(xiàn)在,此測(cè)試用例的結(jié)果更具描述性。 它不僅告訴您操作失敗,而且還準(zhǔn)確地向您顯示了預(yù)期值和實(shí)際值。 這可能會(huì)立即提示您可能存在問(wèn)題的地方。
翻譯自: https://www.javacodegeeks.com/2013/06/unit-testing-tip-create-descriptive-tests.html
總結(jié)
以上是生活随笔為你收集整理的单元测试技巧:创建描述性测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎样连接普联450m无线路由器设置450
- 下一篇: 填充一个池需要多少个线程?