亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Xamarin MvvmCross 獲得代碼覆蓋率?

如何使用 Xamarin MvvmCross 獲得代碼覆蓋率?

C#
慕桂英546537 2022-06-12 10:48:16
你好!我試圖找出在 Windows 10 中使用 MvvmCross 和 Visual Studio Community 2017 開發的 Xamarin 應用程序 (Xamarin.Android) 的代碼覆蓋率。描述我們已經嘗試過兩次:我們第一次創建了一個 MSTest 項目,我們能夠在 Visual Studio 的測試資源管理器中運行,還可以使用 SonnarQube 導出輸出。盡管我們可以檢查我們的代碼重復、錯誤、漏洞和代碼氣味,但 SonarQube 根本不會報告代碼覆蓋率。我們意識到這是因為 Xamarin 項目使用 .NET Standard 而不是 .NET Framework,而 SonarQube 僅支持 .NET Framework。然后我們找到了這個帶有 Mac 解決方案的鏈接,我引用了這個鏈接:看起來我們遇到的最佳解決方案是使用 NUnitLite 運行程序將測試編譯成可執行文件,然后使用日志分析器、mprof-report 和 ReportGenerator 生成最終的 html 文件:例如mono --debug --profile=log:coverage,covfilter=+MyNamespace,covfilter=-NotMyNamespace,output=coverage.mlpd MyTests.exe --noresultmprof-report --reports=coverage --coverage-out=coverage.xml coverage.mlpdmono ./packages/ReportGenerator.2.5.6/tools/ReportGenerator.exe -reports:coverage.xml -targetdir:reportfirefox ./report/index.htm所以我們將我們的測試項目轉換為使用 NUnit。我們能夠使用 NUnit.Adapter 將 NUnit 附加到 Visual Studio,我們能夠從中生成可執行文件并從二進制安裝程序 (*.msi) 安裝 Mono for Windows (x64)。當我們運行第一個命令時,它會返回測試結果,但也會給出錯誤:在主可執行文件中找不到“日志”分析器,也無法從“單分析器日志”加載它。因此,沒有覆蓋輸出。事實上,似乎也沒有mprof-report安裝,即使在 Mono 命令提示符中也是如此。那么,考慮到我們絕不傾向于購買企業版軟件,有什么方法可以找出我們的 Xamarin MvvmCross 項目的代碼覆蓋率是多少?如果是這樣,怎么辦?
查看完整描述

1 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

終于明白了!它絕對不是 CI/CD 友好的(目前),但它至少可以用來了解 MvvmCross Xamarin 應用程序中單元測試的當前狀態。

此外,它不包括 Droid 項目。但是當我們使用 MVVM 時,Droid 項目應該只包含視圖、資源和綁定(理想情況下)。所以,在我看來,覆蓋它并不像其他項目(AppCore、服務等)那么重要......

無論如何,這就是我所做的:

  • 安裝 NUnit、NUnitLite、NUnit3TestAdapter、OpenCover 和 ReportGenerator(全部通過 NuGet,直接從 Visual Studio 安裝)

  • 將 MSTest 轉換為 NUnit

  • 使用 NUnitLite 將測試構建到可執行的控制臺應用程序中

  • *將應用程序解決方案debugTypebuildOptions的每個項目(Droid 項目和您擁有的任何測試項目除外)從“便攜式”更改為“完整”:轉到Project Properties -> Build。然后,在輸出部分單擊Advanced并選擇Debugging Information -> Change to Full。(謝謝,m4ss1m0g!

  • 現在,運行 OpenCover 和 ReportGenerator 命令(或下面修改過的 .bat 腳本),將覆蓋率報告生成為人類可讀的 .htm 文件。用您的瀏覽器打開 .htm 文件,然后 - 瞧 - 您的報道被報告了!

這是我使用的簡單腳本,我將其放在解決方案的根文件夾中(注意OpenCover 和 ReportGenerator 包的版本,以及使用的所有路徑!您還可以使用 OpenCover 放置過濾器以排除或包含任何命名空間、類和你想要的方法)。

packages\OpenCover.4.6.519\tools\OpenCover.Console.exe -skipautoprops -output:<path-where-you-want-your-xml-results-to-be>\coverage.xml -target:<path-to-your-test-executable-generated-by-NUnitLite> -register:user -filter:"+[*]<your-solution-name>.* -[nunit*]* -[*<your-test-project-name>]*"

packages\ReportGenerator.4.0.4\tools\net47\ReportGenerator.exe -reports:<path-where-your-xml-results-output-are--same-as-output-path-above>\coverage.xml -targetdir:coverage

觀察

  1. 在執行上述步驟并確認它有效后,您可以安裝AxoCover VisualStudio 擴展,它提供了一種查看當前代碼覆蓋率的實用方法,而不必運行上面的 .bat 腳本并導航到輸出覆蓋率所在的文件夾.htm 生成。

  2. 上述過程中的第三步(標有 *)是確保您的測試可執行文件考慮除您的測試項目之外的其他項目的關鍵。


查看完整回答
反對 回復 2022-06-12
  • 1 回答
  • 0 關注
  • 136 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號