2017-05-28 168 views
1

我有一个项目,包含我想测试的类和方法。我有另外一个测试方法的项目,测试我的主要项目的方法。当我运行覆盖测试时,我得到了测试方法代码的覆盖范围,没有我想要测试的方法的覆盖范围

我运行opencover测试,我生成reportgenerator报告,这个命令,我有一个.bet文件:

..\tools\OpenCover.Console.exe -register:user -target:"C:\myDllWithTests.dll" -output:"c:\coverage\opencovertests.xml" 

.\ReportGenerator.exe "-reports:c:\coverage\opencovertests.xml" "-targetdir:c:\coverage\opencovertests.xml\reports" 

我使用MSTest的测试。

问题是,在html报告中,我看到覆盖的代码是测试方法,而不是我测试主项目中的方法。

如何在结果中添加主要方法?

谢谢。

回答

1

target参数为OpenCover传递路径到MSTest(例如“C:\ Program Files文件(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ mstest.exe”)并指定您的测试程序集(例如“C: \ myDllWithTests.dll“)参数为targetargs

要从代码覆盖统计中删除测试程序集,请在filter argument中指定它们。

下面是OpenCover命令,适用于我。这里的测试代码放在SampleApp.dll中,测试代码放在SampleApp.Tests.dll中。

.\OpenCover.Console.exe -register:user -mergebyhash -target:"c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\MSTest.exe" -targetargs:"/testcontainer:\"d:\test\SampleApp\SampleApp.Tests\bin\Debug\SampleApp.Tests.dll\"" -output:UTResults.xml -filter:"+[SampleApp*]* -[SampleApp.Tests]*" 

结果报告只包含SampleApp.dll装配统计,SampleApp.Tests.dll被排除在外:

enter image description here

检查这个answer一些更多的细节。 还有一个由Allen Conway的great article使用OpenCover & ReportGenerator for .Net项目。

+0

我试着添加targetargs,但结果是一样的。关于这篇文章,我知道,但他没有提供源代码,我怀疑测试是否与主代码相同,或者与其他dll不同。在我的情况下,问题是我只能得到测试组件的覆盖范围,而不是主要组件。 –

+0

我已经尝试过这个过滤器:-filter:“+ [\ * *] \ * - [\ * * Tests] \ *”-mergebyhash但它不包含与测试相同的文件夹中的main.dll。 DLL。此外,我已经尝试了主DLL的完整名称,但仍然无法正常工作。 –

+0

可能问题不在于OpenCover,而在于测试本身。 MSTest的输出是什么?您是否看到执行测试的统计信息,例如“1/1测试通过”? – CodeFuller