【问题标题】:Unit Testing and Code Coverage are showing as 0% in SonarSonar 中的单元测试和代码覆盖率显示为 0%
【发布时间】:2013-11-23 22:31:21
【问题描述】:

我正在尝试为 C# 项目设置单元测试和代码覆盖率。我使用 sonar runner 作为分析器,Gallio 3.4.14 OpenCover4.5.1 这是 sonar-project.properties 文件:

sonar.projectKey=Foo

sonar.projectName=Foo-SonarQube Runner

sonar.projectVersion=1.0

# Path to the source directories (required)
sonar.sources=.

sonar.language=cs

sonar.sourceEncoding=UTF-8

sonar.dotnet.visualstudio.solution.file=Foo.sln

sonar.silverlight.4.mscorlib.location=C:\Program Files (x86)\Reference Assemblies
\Microsoft\Framework\Silverlight\v5.0

sonar.dotnet.excludeGeneratedCode=true

sonar.dotnet.4.0.sdk.directory=C:/WIndows/Microsoft.NET/Framework/v4.0.30319
sonar.dotnet.version=4.0


sonar.gallio.runner=IsolatedProcess

sonar.gallio.coverage.tool=OpenCover 

sonar.donet.visualstudio.testProjectPattern=**.Tests;   **.UnitTests

sonar.opencover.installDirectory=C:/Program Files (x86)/OpenCover
sonar.dotnet.test.assemblies=FooUnitTests\bin\Release\FooUnitTests.dll 

它运行成功,但在日志中我看到 Gallio 没有执行:

No assembly to check with Gendarme

Skipping the non generated assembly of project : Foo

No assembly to check with NDeps

Gallio won't execute as there are no test projects.

任何帮助将不胜感激

【问题讨论】:

    标签: c# unit-testing code-coverage sonarqube


    【解决方案1】:

    仔细检查您的测试项目模式: sonar.donet.visualstudio.testProjectPattern=**.Tests; **.UnitTests

    试试这个: sonar.donet.visualstudio.testProjectPattern=*Tests;*UnitTests

    此外,在 sonar-runner 输出的顶部(前 20 行左右),您应该会看到如下所示的一些行:

    05:40:07.021 INFO  - Initializing Hibernate
    05:40:13.601 INFO  - Load project settings
    05:40:13.653 INFO  - The following 'sln' file has been found and will be used: C:\TeamCity\buildAgent\work\920b95942ca1a758\Sonar\MyProject-Sonar.sln
    05:40:17.276 INFO  - The project 'MyProject.Tests' has been qualified as a test project.
    05:40:19.235 INFO  - The project 'MyOther.Project.Tests' has been qualified as a test project.
    

    如果您没有看到此内容,请尝试使用 -X 运行 sonar-runner 以启用调试输出。这应该会为您提供更多关于正在使用哪些模式来匹配测试项目的详细信息。

    另外,任何路径都需要使用正斜杠(/),因此需要更改以下内容:

    sonar.silverlight.4.mscorlib.location=C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0
    sonar.dotnet.test.assemblies=FooUnitTests\bin\Release\FooUnitTests.dll 
    

    到这里:

    sonar.silverlight.4.mscorlib.location=C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/Silverlight/v5.0
    sonar.dotnet.test.assemblies=FooUnitTests/bin/Release/FooUnitTests.dll 
    

    【讨论】:

    • [22:52:38][Step 3/3] 22:52:38.479 信息 - 已找到以下“sln”文件并将使用:C:TeamCity\Foo\Foo。 sln [22:52:38][Step 3/3] 22:52:38.480 INFO - 旧的 .NET 参数“sonar.donet.visualstudio.testProjectPattern”已找到并将使用。它的值:'.Tests;.UnitTests' [22:52:40][Step 3/3] 22:52:40.538 INFO - 应用项目排除项
    • 虽然 sonar-runner 似乎找到了 sln 文件,但 Gallio 没有执行。是的 testProjectPattern 我有一个 * 但是当我发布时 * 没有出现。我想知道是否需要为覆盖率和单元测试报告创建路径: # 集成测试执行报告的路径 sonar.gallio.it.reports.path=reports/it-gallio-report.xml # 代码覆盖率的路径报告 sonar.gallio.it.coverage.reports.path=reports/it-coverage-report.xml 我更改了 \ 但仍然给出相同的结果。
    • 只有在您使用“reuseReport”模式时才需要报告路径,我假设您没有使用该模式。尝试从您的模式中删除点 (.),使其成为“*Tests”。有关模式语法,请参阅:docs.codehaus.org/plugins/servlet/…
    • 好的,所以现在我得到了报道,因为我认为报道已经开始回升。 10:51:45.740 信息-传感器 org.sonar.plugins.csharp.gallio.CoverageReportSensor@72fdeacb ... 10:51:45.756 信息-(安全模式)解析 Gallio 它的覆盖率报告:10:51:45.756 信息-传感器组织.sonar.plugins.csharp.gallio.CoverageReportSensor@72fdeacb 完成:16
    • 现在我已经隔离了单元测试的问题 10:39:08.557 INFO - 使用模式 FooUnitTests/bin/Release/FooUnitTests.dll 找不到测试程序集,回退到 Visual s tudio 默认程序集位置 10 :39:08.557 警告 - 在以下位置找不到测试程序集: C:\TeamCity\FooU nitTests\bin\Debug\FooUnitTests.dll ,使用以下配置: - csproj 文件: C:\TeamCity\FooUnitTests\FooUnitTests.csproj
    猜你喜欢
    • 2012-01-18
    • 2013-11-28
    • 2016-03-27
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多