我想使用 MSTest 来收集代码覆盖率,不仅用于经典单元测试,还用于针对Web服务进行的调用 . 我正在使用 Visual Studio 2013 与最新的更新 .

我有源代码和二进制文件(如果需要,还包括 PDB 文件),但不幸的是我到目前为止我的尝试都没有用 .

我尝试在我的测试项目中配置 .runsettings 文件以指向webservice的二进制文件可用的目录,并将 SymbolSearchPath 设置为该目录:

...
<CodeCoverage>
    <ModulePaths>
        <Exclude>
            <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
        </Exclude>
        <Include>
            <ModulePath>\\AValidPathTo\My.dll</ModulePath>
        </Include>
    </ModulePaths>
</CodeCoverage>

<SymbolSearchPaths>
    <Path>\\AValidPathTo\My\Binaries</Path>
</SymbolSearchPaths>
...

代码覆盖似乎忽略了这些设置 - 我确保通过 Test => Test Settings 选择了正确的 .runsettings 文件 .

我的第二次尝试是遵循_2565063中描述的步骤 - 摘录如下:

  • 在本地复制所需的产品二进制文件,产品PDB和测试二进制文件 .

  • 检测产品二进制文件:a . 打开Visual Studio 2005命令提示符(“开始”|“所有程序”|“Microsoft Visual Studio 2005”|“Visual Studio工具”|“Visual Studio命令提示符”) . b . 转到二进制文件所在的目录c . 对所有二进制文件执行“vsinstr -coverage” . 例如如果您的二进制名称是'coolproduct.dll',则键入“vsinstr -coverage coolproduct.dll” .

  • 启动代码覆盖率监视进程a . 返回上一个命令提示符b.Type“vsperfcmd -start:coverage -output:outputFilename.coverage” .

  • 执行测试a . 对于自动化测试,导航到测试二进制文件所在的目录并执行“mstest /testcontainer:TestDll.dll” . b . 如果有的话,运行手动测试

  • 结束代码覆盖率监视进程a . 在先前打开的命令提示符下,键入“vsperfcmd -shutdown” . 这将关闭覆盖监视器并将覆盖数据保存到磁盘 .

不幸的是,这也没有用 - 在重新签名已签名的DLL之后(这是一个必要的额外步骤)我最终得到了一个没有任何数据的 .coverage 文件(也没有错误) .

使用 MSTest 为webservice调用收集代码覆盖率的步骤是什么?