我有一个TFS 2015构建,它构建了我们的一个应用程序(它是一个ASP.NET Web API应用程序)。作为构建过程的一部分,它运行我们的单元测试。
我有一个 Visual Studio Tes t构建步骤,它运行这些单元测试,它们都通过了。
然后我从同一个版本运行 dotCover 来确定代码覆盖率(我们没有使用内置代码覆盖,因为我们没有企业许可证)。但是,从 dotCover 运行时,所有相同的单元测试都会失败。
我使用脚本步骤来运行批处理文件,该文件调用 dotCover ,如下所示。
E:\ JetBrains \ Installations \ dotCover05 \ dotCover.exe分析coverage.xml /LogFile=dotcover.log
dotCover 日志文件似乎没有说明单元测试失败的原因。
从 Visual Studio测试构建步骤运行时单元测试通过的任何想法,然后从 dotCover 运行时失败?
答案 0 :(得分:2)
似乎问题与我的构建使用XML文件来保存某些数据值这一事实有关。当在TFS下运行而不是由dotCover运行时,VSTest可以找到此XML文件。
当dotCover运行时,它会创建一个 TestResults 文件夹,然后将所有必需的文件复制到运行单元测试所需的文件。除XML文件外,将复制所有文件。我已将文件设置为" 始终复制"所以无法理解为什么这个文件没有被复制。我尝试将文件手动复制为批处理文件,但文件夹结构是由dotCover创建的,因此在我实际运行代码覆盖率之前它不存在。
解决方案是使用 DeploymentItem()属性修饰我的测试类。
[TestClass]
[DeploymentItem("File.xml")]
这解决了我的问题。
答案 1 :(得分:1)
确保您的构建服务帐户具有足够的权限来运行dotcove.exe。根据您的E:\JetBrains\Installations\dotCover05\dotCover.exe
似乎您未在构建代理上安装 所有用户 。哪个应该安装在%ProgramFiles(x86)%
而不是%LOCALAPPDATA%\ JetBrains \ Installations下。
尝试在dotCover中使用CoreInstructionSet
参数作为您的情况的解决方法。详情见下图。
执行此操作后,尝试再次运行构建。
答案 2 :(得分:0)
如果文件复制失败,您也可以尝试使用此方法:Shadow-copying in dotCover: if your NUnit tests fail during continuous testing。