嗨!我试图找出在Windows 10中使用MvvmCross和Visual Studio Community 2017在 Windows 中开发的Xamarin应用程序(Xamarin.Android)的代码覆盖范围。
我们已经尝试过两次:
我们意识到这是因为Xamarin项目使用.NET Standard而不是.NET Framework,而SonarQube仅支持.NET Framework。然后我们发现this link带有Mac的解决方案,我引用:
我们遇到的最好的解决方案似乎是使用NUnitLiteRunner将测试编译为可执行文件,然后使用日志分析器,mprof-report和ReportGenerator生成最终的html文件:
例如
mono --debug --profile=log:coverage,covfilter=+MyNamespace,covfilter=-NotMyNamespace,output=coverage.mlpd MyTests.exe --noresult
mprof-report --reports=coverage --coverage-out=coverage.xml coverage.mlpd
mono ./packages/ReportGenerator.2.5.6/tools/ReportGenerator.exe -reports:coverage.xml -targetdir:report
firefox ./report/index.htm
在主可执行文件中找不到'log'分析器,也无法从'mono-profiler-log'中加载它。
因此,没有覆盖输出。实际上,即使在Mono命令提示符中,似乎也没有安装mprof-report
。
因此,考虑到我们绝不打算购买企业版软件,有没有办法找出Xamarin MvvmCross项目的代码覆盖范围?如果是这样,怎么办?
答案 0 :(得分:0)
终于明白了!它绝对不是CI / CD友好的,但它至少可以用来了解MvvmCross Xamarin应用程序中单元测试的当前状态。
此外,它也不涉及Droid项目。但是,当我们使用MVVM时,无论如何(理想情况下),Droid项目都应仅包含视图,资源和绑定。因此,我认为,覆盖它并不像其他项目(AppCore,服务等)那么重要。
无论如何,这就是我所做的:
debugType
中的buildOptions
从“ Portable”更改为“ Full”:转至项目属性-> 构建。然后,在输出部分上,单击高级,然后选择调试信息->更改为完整。 (Thanks, m4ss1m0g!)这是我使用的简单脚本,我将其放置在解决方案的根文件夹中(注意OpenCover和ReportGenerator软件包的版本,以及使用的所有路径 !You can also place filters with OpenCover to exclude or include any Namespaces, Classes and Methods you want)。
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
肥胖: