單元測試小技巧(3)

發表于:2015-07-31來源:uml.org.cn作者:不詳點擊數: 標簽:單元測試
你可以打亂代碼去測試覆蓋,這有一些關于如何測試的變化: 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

  你可以打亂代碼去測試覆蓋,這有一些關于如何測試的變化:

' 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

  如果所有的測試依然通過,那么你缺少了一個測試,另外一個紅色標志是在你為多種相同值測試的檢查。如下:

  Assert.AreEqual(3, retval)

  一些方法的關系只看一次(在一個測試中)意味著你可以安全的返回3作為一個值,然后所有的針對這個方法的測試都將通過,這個當然意味著你丟失了一個測試。如果你在單元測試中檢查一下代碼,它就很容易被檢查出來。

  確保你的測試寫的越簡單越好,一個單元測試一般不包括一個if switch或者其他任何的邏輯聲明。如果你發現你自己在你的測試中寫了一些類似于邏輯聲明的東西,這是一個好的機會來測試一個以上的事件,在做這樣的操作的時候,你會使得你的測試比讀和維護更加的困難,在生產代碼中同樣如此。保持你的測試簡單,你在生產代碼中發現bug要勝于在你的單元測試中。

  使測試易于運行 如果你的測試并不容易運行,那么人們不會信任它。你的應用程序最有可能有下面兩種類型的測試:

  測試在沒有任何配置的情況下平穩的運行(這種類型的測試,我們可以在任何的機器上,在代碼的最終版上或者在源控制上測試,并且做到沒有任何故障的測試)

  在運行前需要一些配置.

  第一種類型是你應該模仿的,第二種類型是你通常做的,尤其你如果你是一個新的單元測試。如果你發現你自己測試時有很多的特殊的需求,現在是正常的,但是重要的一點就是你要隔離出兩個組讓他們能夠單獨的去做測試。

  我們的想法是任意一個開發者都應該有能力修改和運行一些不需要設置特殊的配置的測試進行測試。如果這有一些測試需要在運行前有特殊的關注,開發者應該知道他們,然后他可以花一些時間學習這些測試的方法。因為很多的開發者比較的懶(當然,不是你),你可以設想,他們不會去做那些特殊的設置,相反,他們會讓測試失敗因為他們有更好的事情去做。

  當用戶讓測試失敗時,他們開始考慮他們不能夠信任這些測試了。很難說是否測試可以在一個中找到一個正式的bug或者只是一個錯誤的定位。開發者可能不明白為什么測試者會在一開始就執行失敗。一旦他們不再信任你的測試,開發者將會停止運行它們,那么bug就會駐留在程序中,之后一連串的麻煩就來了。。。

  為了避免這件事情,確認你總是有一個組準備好了去測試,測試程序則是可以安全運行,可信任的。把那些屬于配置挑戰組的測試放到不同的文件夾,樹或者工程中,同時標記特殊的說明指明他們在運行前需要做什么。完成這些后,開發者可以不投入時間去配置就開始測試工作。當他們有時間和需要時,他們也可以配置,運行更多的測試環節。

  返回頁首

  創建維護測試

  我們應該試著避免測試私有或保護成員。這篇文章也許能夠幫助一些人解決一部分問題,但是我很堅決相信百分之九十九的時間,你可以全面的測試一個類,通過編寫一些與它的獨立公共接口相反的單元測試。測試私有成員可以使你的測試更加脆弱,如果這個需要被測試的類的一些內在方面略有改動的話。你應該使用通過調用一些代碼里別處的公共功能這一方法去測試私有功能。當你依然能夠確定全部功能并沒有改變的時候,僅僅測試公共成員會導致測試遭受常量代碼的因式分解以及內部的執行情況改變。

  在可能的時候,應該重新使用你的創造物,處理過程,和聲明代碼。不要在一個單元測試中直接的創建類的實例。如果你在任何并不包含在此單元測試框架中的類前面看到這個單詞“new”,你應該考慮一下將你創造的代碼放在一個特殊的整體方法之中,它可以為你創建一個對象實例。你可以到時再重新使用這個方法來獲得你的測試在其他測試之中的最新實例。這樣可以幫助你來保持這個測試維護所需的時間,然后在測試進行的時候,從對代碼無法預料的改變之中保護你的測試。作為一個例子,Figure 1展示了一對簡單的測試,它使用了一個Calc類。

原文轉自:http://www.uml.org.cn/Test/200605091.htm

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97