一、什么叫單元測試(unit testing)?
是指對軟件中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函 數,Java里單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等。總的來說,單元就是人為規定的最小的被測功能模塊。單元測試是在軟件開發過程中 要進行的最低級別的測試活動,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試。
C#中,一個方法,一個類,一個窗口的測試。即單元測試。
二、為什么要進行單元測試。
為了程序的正確性,盡早的發現程序的BUG,便於后期的開發及調試,維護。
三、誰做這一工作?
答案是:程序員自己,因為程序員才明白自己寫的code,才知道要達到的效果。
四、什么時候做?
單元測試越早越好,早到什么程度?極限編程(Extreme Programming,或簡稱XP)講究TDD,即測試驅動開發,先編寫測試代碼,再進行開發。在實際的工作中,可以不必過分強調先什么后什么,重要的是高效和感覺舒適。從經驗來看,先編寫產品函數的框架,然后編寫測試函數,針對產品函數的功能編寫測試用例,然后編寫產品函數的代碼,每寫一個功能點都運行測試,隨時補充測試用例。所謂先編寫產品函數的框架,是指先編寫函數空的實現,有返回值的直接返回一個合適值,編譯通過后再編寫測試代碼,這時,函數名、參數表、返回類型都應該確定下來了,所編寫的測試代碼以后需修改的可能性比較小。
五、 C#項目測試DEMO, 本demo用VS2019寫。
新建一個控制台應用。名稱叫:UnitTestDemo
寫一個待測試的方法。
新建一個單元測試項目。名稱叫:UnitTestDemoTest
引用UnitTestDemo
編寫測試方法
修改類名,及方法名。UnitTest1重命名為ProgramTest,方法名:TestMethod1改為:AddTest。
這里說明一下,方法面上面的特性:[TestMethod]這是必須的。告訴編譯器這是一個測試法式。
寫代碼。調用要測試的方法。
打開“測試資源管理器”,在“測試”->窗口->測試資源管理器
如果未通過。是個紅色的X,我們現在再寫一個未通過的方法。
注意方法的特性一定要加[TestMethod],再去運行測試。
回到主項目。看方法提示行。上面有標測測試通過。
第二個測試失敗了
在方法上面有一個清楚的提示。
六、 sonarqube集成單元測試
這里需要借助Opencover來生成單元測試覆蓋報告文檔
1. 安裝Opencover
下載地址:https://phoenixnap.dl.sourceforge.net/project/opencover.mirror/4.7.1221/opencover.4.7.1221.msi
安裝過程所有選項默認即可
2. 執行sonarqub 掃描
SonarScanner.MSBuild.exe begin /k:"UnitTestDemo" /d:sonar.host.url="http://192.168.101.76:9000" /d:sonar.login="8ad34045e7e978ca678e184c397a76a62114f9ed" /d:sonar.cs.opencover.reportsPaths="%CD%\testcover.xml"
MSBuild.exe /t:Rebuild
"C:\Users\sunpengfei\AppData\Local\Apps\OpenCover\OpenCover.Console.exe" -output:"%CD%\testcover.xml" -register:user -target:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" -targetargs:"%CD%\UnitTestDemoTest\bin\Debug\UnitTestDemoTest.dll"
#注意替換相關exe 文件路徑OpenCover.Console.exe是前面安裝的 ,其他的是vs 2019自帶程序,#UnitTestDemoTest.dll是測試項目生成
SonarScanner.MSBuild.exe end /d:sonar.login="8ad34045e7e978ca678e184c397a76a62114f9ed"
Begin 和end是固定格式,這里begin部分多了一個/d選項,/d為dynamic properties 動態屬性.通過動態屬性指定單元測試報告的位置.%CD%即為當前目錄
第二段 msbuild.exe執行構建.
第三段 這里是生成單元測試覆蓋率報告的關鍵. 首先指定Opencover所在位置,-register user 為注冊當前windows用戶以使其有權限執行.-output 指定覆蓋率文件輸出位置,這里必須和上面的 sonar.cs.opencover.reportsPaths保持一致. -target為要指定的單元測試runner,這里使用的是visual studio自帶的vstest.console.exe targetargs指定要進行單元測試的目標dll.
3. 掃描結果
執行完成以后,我們再打開sonarqube web管理界面就會看到剛剛生成的mytest項目