我们的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。
有什么新的提示吗?
答案 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。