Visual Studio 2017 你有寫單元測試嗎?
- 2017-01-28
- 26198
- 0
- Visual Studio 2017
測試是開發的一部分,身為一個負責的開發人員針對自己的程式碼寫單元測試就是一個負責任的行為,Visual Studio 2017 (以下簡稱 VS2017)針對單元測試作了非常大的加強,如果你有在寫單元測試看了本篇的文章後你應該會迫不及待的安裝 VS2017 ,如果您尚未開始撰寫測試,看了本篇的情境後你應該也可以理解到測試對於程式的重要性。
本篇包含如何將舊的測試專案調整成支援 Live Unit Testing
首先來提一下測試總管,在 VS2017中測試總管改用 時:分:秒:毫秒的方式來呈現執行時間(demo個人是不太喜歡啦)
在 SkillTree 的課程中講師一直強調測試是開發的一部分,因此隨時保持測試案例都是綠燈狀態是必須的,您可以開啟「建置之後執行執行」的功能,讓開發者每次編譯後都會自動跑測試。
Live Unit Testing
在 VS2017 中對於測試最大的一個改變就是增加了 Live Unit Testing 功能,開發者可以從「測試」→「 Live Unit Testing」→「 Start」 開啟此功能。
將 Live Unit Testing 開啟後,可以看到方法的左邊區塊增加了提示
藉由此提示開發者可以明確的知道該功能是否有被單元測試涵蓋以及是否有通過單元測試,而且這樣的顯示是即時!您完全不用存檔、建置、跑測試就可以直接有效果(非同步的所以不會影響效能),非常的過癮!!
當第一個綠燈出現後,再來我們就會補上第二個測試案例,我們要來測試加法器是否可以支援小數點,方法寫完後前方的標示就會呈現一槓的符號,因為目前還沒有任何測試案例涵蓋到該方法。
立即來補測試案例吧
測試案例完成後馬上看到 Live Unit Testing 顯示此測試並未通過,怪了 50.1+70.1
為什麼不是 120.2
呢?實際的跑測試看看到底 Actual
是多少
120.2 不等於 120.2
,到底是什麼回事,單元測試不可靠嗎?偵錯看看吧看到了嗎?真實的值是 120.199999999999 ,所以說「算錢用浮點,遲早被人扁。」
既然知道了問題所在後就調整程式,調整完畢後 Live Unit Testing 馬上打了綠勾,暢快的程度不可言語。
Live Unit Testing 可以讓開發人員再撰寫測試的時候完全不被中斷(當然你需要對 Visual Studio 的功能有一定能力的認識)建議所有的開發人員務必要試一試!
如果您有在使用 BDD 那 SpecFlow 目前也已經支援 VS2017 了,而且 Live Unit Testing 也支援唷
舊專案升級 MSTest V1 to MSTest V2
當開發者使用 VS2017 開啟舊專案的時候會發現 Live Unit Testing 全趴,這原因是因為舊專案的 MSTest是 1.x 版本,必須改用全新的 2.x 才能和 Live Unit Testing 搭配,升級方式只需要用 NuGet 搜尋「MSTest.TestAdapter」然後將找到兩兩個套件一併安裝
再開啟測試程式,就可以看到 Live Unit Testing 正常運作了。但你還是會有一個嚴重錯誤
'TestClassAttribute' 同時存在於 'Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 和 'Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 中
要修正此錯誤必須調整專案檔,請用記事本開啟專案的 csproj 找到以下這段把它移除
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
然後重新載入專案就大功告成了。
回應討論