使用 OpenCover 运行 XUnit 和 FluentAssertions 会给出错误消息

Posted

技术标签:

【中文标题】使用 OpenCover 运行 XUnit 和 FluentAssertions 会给出错误消息【英文标题】:Running XUnit and FluentAssertions with OpenCover gives error message 【发布时间】:2017-04-11 22:58:54 【问题描述】:

我正在尝试在 ASP.NET Core 上使用 Xunit 和 Fluent Assertions 运行代码覆盖率。但是,我收到一条我不太明白的错误消息。

我的测试项目的project.json:


  "version": "1.0.0-*",
  "testRunner": "xunit",
  "debugType": "portable",
  "dependencies": 
    "xunit": "2.2.0-beta2-build3300",
    "FluentAssertions": "4.15.0",
    "dotnet-test-xunit": "2.2.0-preview2-build1029",
    "ExpenseReporting": "1.0.0-*",
    "Moq": "4.6.38-alpha"
  ,
  "commands": 
    "test": "xunit.runner.dnx"
  ,
  "frameworks": 
    "netcoreapp1.0": 
      "dependencies": 
        "Microsoft.NETCore.App": 
          "type": "platform",
          "version": "1.0.1"
        
      
    
  

我的 OpenCover 命令:

OpenCover.Console.exe -target:"C:\Program Files\dotnet\dotnet.exe" -targetargs:"test "C:\Users\johndoe\Desktop\Application\ExpenseReporting.Test\project.json"" -output:coverage.xml -register:user -filter:"+[*]* -[xunit*]* -[*]*Migrations.*"

我收到很多错误,但都是这样的:

An System.IO.DirectoryNotFoundException occured: Could not find a part of the path 'C:\projects\fluentassertions-vf06b\Src\FluentAssertions.NET40\Execution\MSTestFramwork.cs'.

我很清楚找不到该目录,因为它不存在。我想知道为什么它试图在那里访问它?

【问题讨论】:

你找到解决办法了吗? 【参考方案1】:

看起来 OpenCover 正试图在其覆盖率报告中包含 FluentAssertions 的源代码。我不完全确定它为什么这样做,但我能够通过告诉 OpenCover 排除 FluentAssertions 来解决这个问题。

这是我正在使用的过滤器:

-filter:"+[*]* -[*FluentAssertions*]*"

【讨论】:

有趣,但添加过滤器至少可以防止错误消息出现。多个过滤器的参考和使用:github.com/opencover/opencover/wiki/Usage#understanding-filters【参考方案2】:

您的 project.json 文件似乎有些问题。如果您使用dotnet 命令,则没有commands 元素。你的 project.json 文件应该是这样的。


    "version": "1.0.0-*",
    "testRunner": "xunit",
    "dependencies": 
        "xunit": "2.2.0-beta2-build3300",
        "dotnet-test-xunit": "2.2.0-preview2-build1029",
        "FluentAssertions": "4.15.0",
        "ExpenseReporting": "1.0.0-*",
        "Moq": "4.6.38-alpha"
    ,
    "frameworks": 
        "netcoreapp1.0": 
            "dependencies": 
                "Microsoft.NETCore.App": 
                    "type": "platform",
                    "version": "1.0.0"
                
            
        
    

https://xunit.github.io/docs/getting-started-dotnet-core.html

这是运行测试并使用 open cover 获取代码覆盖率的命令。

OpenCover.Console.exe -target:"C:\Program Files\dotnet\dotnet.exe" -targetargs:"test C:\projects\HelloWorld.Tests" -register:user -filter:"+[*]* -[xunit*]*" -output:coverage.xml -oldStyle

【讨论】:

FluentAssertions 仍然出现同样的错误

以上是关于使用 OpenCover 运行 XUnit 和 FluentAssertions 会给出错误消息的主要内容,如果未能解决你的问题,请参考以下文章

OpenCover - 如何查看每个测试的覆盖率?

OpenCover MSBuild 集成 - 未生成任何结果

基于OpenCover进行代码覆盖率测试

无法使用 .NET Core 运行 xUnit 测试

无法使用 .NET Core 运行 xUnit 测试

在 XUnit 中运行 BenchmarkDotNet