单元测试在xunit.runner.console中失败,但在本地通过

时间:2019-07-30 06:52:10

标签: unit-testing mocking xunit dotcover

我们的TFS CI构建使用dotCover来运行xUnit测试。但是,某些测试在那里失败,但是在本地通过。

我从nuget下载了dotCover.CommandLineTools和xunit.runner.console。打开软件包的包装,并尝试像在TFS管道中执行的那样在本地运行dotCover cover命令:

.\tools\dotcover.exe cover /TargetExecutable=".\..\xunit-runner\tools\net461\xunit.console.exe"
/TargetArguments="c:\Projects\MySolution\Sources\MyTestProject\bin\Debug\MyTestProject.dll -xml c:/temp/testResultFile.xml"
/Output="c:/temp/coverageResultFile.dcvr"
/Filters='-:module=xunit.*;-:module=*UnitTests*'

获得与CI中相同的错误。从我对dotCover输出在失败的测试中显示的错误的调查来看,当从VS本地运行测试并使用dotCover运行它们时,模拟数据似乎并不相同。

有人遇到这样的问题吗?有什么解决办法吗?

编辑:刚刚尝试了另一件事,运行了命令

.\xunit.console c:\Projects\MySolution\Sources\MyTestProject\bin\Debug\MyTestProject.dll,发现这给了我与CI相同的错误,所以问题的原因不是CI,也不是dotCover,而是xunit.runner.console。

有什么新的提示吗?

1 个答案:

答案 0 :(得分:0)

根据您的描述和分析。这个问题似乎与TFS端无关(例如,构建任务/管道的配置。因为当您直接在本地作为TFS构建服务器运行dotCover cover命令时,结果相同。

看看这个类似的问题是否有用:Unit tests are failing when run from dotCover

  

问题似乎与我的构建使用   XML文件可保存某些数据值。该XML文件由VSTest找到   在TFS下运行,而不是由dotCover运行。

     

当dotCover运行时,它会创建一个TestResults文件夹,然后   将所有必需的文件复制到运行单元测试所需的文件。所有   复制文件,除了XML文件。我已将文件设置为“复制   总是”,因此无法理解为什么不复制此文件。   手动将文件复制为批处理文件,但文件夹结构为   由dotCover创建,因此在我实际运行代码之前不存在   覆盖范围

如果文件复制失败,则另一种方法:Shadow-copying in dotCover: if your NUnit tests fail during continuous testing