【发布时间】:2018-12-12 16:59:47
【问题描述】:
tl;博士
嗨!我试图找出我们的 Xamarin 应用程序 (Xamarin.Android) 的代码覆盖率是多少,该应用程序是使用 MvvmCross 和 Visual Studio Community 2017 在 Windows 10 中开发的。
说明
我们已经尝试过两次了:
- 我们第一次创建 MSTest 项目时,我们能够在 Visual Studio 的测试资源管理器中运行,还可以使用 SonnarQube 导出输出。尽管我们可以检查我们的代码重复、错误、漏洞和代码异味,但 SonarQube 根本不会报告代码覆盖率。
我们意识到这是因为 Xamarin 项目使用 .NET Standard 而不是 .NET Framework,而 SonarQube 仅支持 .NET Framework。然后我们找到了this link 的Mac 解决方案,我引用了:
看起来我们遇到的最佳解决方案是使用 NUnitLite 运行程序将测试编译成可执行文件,然后使用日志分析器、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
- 因此我们将测试项目转换为使用 NUnit。我们能够使用 NUnit.Adapter 将 NUnit 附加到 Visual Studio,我们能够从中生成可执行文件并从二进制安装程序 (*.msi) 安装 Mono for Windows (x64)。当我们运行第一个命令时,它会返回测试结果,但也会报错:
在主可执行文件中找不到“日志”分析器,也无法从“mono-profiler-log”加载。
因此,没有覆盖输出。事实上,似乎也没有安装 mprof-report,即使在 Mono 命令提示符中也是如此。
那么,考虑到我们根本不倾向于购买企业版软件,是否有任何方法可以找出 Xamarin MvvmCross 项目的代码覆盖率?如果可以,怎么做?
【问题讨论】:
-
现在我正在尝试安装单声道,并在 Ubuntu 应用程序中再次进行第二次尝试(从 Microsoft Store 下载并安装)。我会不断更新这篇文章。
-
Mono 安装在 Ubuntu Bash 中并正常工作。
mprof-report也可以。只是按照问题中提到的链接的尝试,它以人类可读的形式生成了输出文件,但报告没有覆盖任何行。看起来它忽略了我的解决方案,只考虑了测试项目,但它是依赖项。我现在将调整covfilter命名空间。 -
好的,看起来
covfilter中声明的命名空间没有问题。相反,当我在 Ubuntu 中运行第一个 Mono 命令时,它会引发异常:System.TypeInitializationException : The type initializer for 'AutoMapper.Mappers.FlagsEnumMapper' threw an exception. ----> System.MissingMethodException : Method 'Array.Empty' not found.。在 Windows 中运行完全相同的 Mono 命令时不会发生这种情况。我现在就调查一下。 -
好的,看来是安装的Mono版本有问题。通过
apt-get安装的是4.2.1,但最新的是5.16.0。我继续尝试另一种方法,并安装了 OpenCover 来替代 Mono。但是现在,它只考虑我的解决方案中的测试项目,而不考虑解决方案中的任何其他程序集(使用 Mono 的最后一次尝试至少会考虑测试调用的第一行,然后应用程序会因异常而崩溃).. .
标签: c# xamarin mono code-coverage mvvmcross