为了将测试分发到不同的机器(远程方式),我们必须使用.testsettings文件。在此类文件中,我们已配置为允许通过以下方式收集测试覆盖率数据:
<DataCollectors>
<DataCollector uri="datacollector://microsoft/CodeCoverage/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.CodeCoverage.CoveragePlugIn, Microsoft.VisualStudio.QualityTools.Plugins.CodeCoverage, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Code Coverage (Visual Studio 2010)">
<Configuration>
<CodeCoverage keyFile="xxx.snk" xmlns="">
<Regular>
<CodeCoverageItem binaryFile="xxx.dll" pdbFile="xxx.pdb" instrumentInPlace="true" />
但问题是测试覆盖率数据从未发布回TFS服务器。在诊断构建过程时,测试结果已经可以根据构建日志发布:
Results file: d:\Builds\xxxx.trx
Test Settings: xxx
Waiting to publish...
Publishing results of test run xxx.trx to https://tfs.xxx/tfs/xxx...
Publish completed successfully.
似乎覆盖数据不在xxx.trx文件中,并且构建不够智能,无法分配和发布它们。所以从构建摘要中我们可以看到:
23 modules instrumented - 0% of all code blocks covered
有没有办法手动发布此类数据或通过某些TFS API或编码活动将测试覆盖率结果写回TFS服务器?
[更新]检查测试结果文件时,结果本身似乎已包含有关如何查找.coverage文件的知识:
<ResultSummary outcome="Completed">
<ResultFile path="VM-TEST01\data.coverage" />
<ResultFile path="VM-TEST02\data.coverage" />
但问题是MSTest从未将它们发布到TFS服务器上!