1. 程式人生 > >IntelliTest(0) - Introducing Smart Unit Tests[譯]

IntelliTest(0) - Introducing Smart Unit Tests[譯]

evo ng- 開始 需要 asp 情況下 博客 自動更新 -m

[作者提醒:從Visual Studio 2015 RC 版本開始,“Smart Unit Tests”已經更名為“IntelliTest”]

??關於IntelliTest,有一個短視頻,如果你還沒看過,強烈建議去看一下。其中介紹了IntelliTest給測試開發帶來的新特性,這些新特性將幫助開發者克服在初寫單元測試時的惰性。除了視頻中所描述的那部分,IntelliTest還包括許多其他特性,這一系列的博客將完善你對整個IntelliTest的知識。

??首先,我們來回憶一下視頻中的一個例子 - 你正在開發,此時必須要修改一段代碼,而這段代碼是未被單元測試覆蓋的。在開始之前,我們可能希望可以在單元測試框架的幫助下,確保代碼能夠始終正常工作,但這說起來容易做起來難。我們極有可能面臨如下幾個問題:

  • 這份代碼可能是難以測試的,它也許對外界有許多依賴,這些依賴都需要被隔離,如果不清楚這些依賴,我們將難以下手。
  • 測試覆蓋的質量也是一個需要考慮的問題。關於測試覆蓋質量的衡量,有許多可以參考的維度,比如:語句覆蓋、路徑覆蓋、組件覆蓋等。即使這些衡量的維度已經很充足,我們依然需要更高的代碼覆蓋率和更多的斷言驗證,以保證代碼的充分測試。要寫出好的測試用例並不容易,我們極有可能反復寫出重復執行相同路徑的測試用例。或者,我們只是寫出那些更容易想到的測試用例。因此,我們很難確保我們的代碼在所有的邊界情況都能符合預期的運行。
  • 更坑爹的是,我們可能根本不知道斷言放在哪裏 - 想象一下你正在修改一堆邏輯復雜而你又不熟悉的代碼吧。

??IntelliTest試圖解決以上這些問題。它會探索到你代碼裏的所有路徑,然後自動生成覆蓋這些路徑的輸入,並記錄相應輸出。這些輸入就是一組高覆蓋率的測試用例。下面就是文章開頭所提到的視頻中的例子截圖:
技術分享圖片

默認情況下,如果你僅僅是在一個函數上運行IntelliTest,它會探測函數的執行路徑,並生成相應的輸入。在這個階段除非測試用例發生了運行是錯誤,否則它會認為這個測試用例通過 - 畢竟,這些都是函數自己的邏輯,IntelliTest不驗證邏輯的正確與否。對於還沒有單元測試的代碼來說,這一點尤其有用,你可以基於這些用例做回歸測試。

??除此之外,如果你寫了斷言來驗證代碼的正確性,IntelliTest會利用你的斷言,保證每一個輸入都能正確處理。當被測代碼改變後,再次運行IntelliTest,它就會自動更新測試用例。

??如果以上內容讓你產生了興趣,那將是對我極大的鼓舞,在接下來的博客中,我們會繼續更加深入的討論IntelliTest的特性。同時,你也可以閱讀這篇文章,如果有任何問題,請在評論中告訴我,我們一起討論,並解決之。

強烈建議閱讀英文原文

date: 2017-10-20 07:43:52

IntelliTest(0) - Introducing Smart Unit Tests[譯]