OpenCover显示0行覆盖mstest

时间:2012-03-07 17:55:10

标签: mstest opencover

'这是输出......'

Loading C:\TEMP\BankDemo_mstest\Test_BankDemo\bin\Debug\Test_BankDemo.dll...
Starting execution...

Results               Top Level Tests
-------               ---------------
Error                 Test.BankDemo.AccountTest.CreditTest
Error                 Test.BankDemo.AccountTest.DebitTest
Error                 Test.BankDemo.AccountTest.FreezeTest
0/3 test(s) Passed, 3 Error

Summary
-------
Test Run Error.
     Error  3
     --------
     Total  3

这是我使用的命令

OpenCover\OpenCover.Console.exe -register:user 
-output:"Codecoverage.xml" 
-mergebyhash 
-target:"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" 
targetargs:"/testcontainer:
"C:\TEMP\BankDemo_mstest\Test_BankDemo\bin\Debug\Test_BankDemo.dll" 
/noisolation" 
-filter:"-[Bank.*]* +[Bank*]* +[Bank.Accounts*]* -[Test.BankDemo*]*"

ReportGenerator\bin\ReportGenerator.exe Codecoverage.xml  Coverage HTML

(我甚至尝试过regsvr32来注册个人资料而我正在使用XP)
实际上我是Nunit,mstest和opencoverage的初学者,我在http://www.nunit.org/index.php?p=quickStart&r=2.4找到了样本单元测试用例所以
** Nunit测试类如下**

private TestContext testContextInstance;  
public TestContext TestContext  
{  
    get { return testContextInstance; }  
    set { testContextInstance = value; }  
}  
private int store;  
[TestInitialize()]  
public void TestFixtureSetUp()  
{  
    store = 1;   
}  

上面的类很好用Nunit和Opencoverage也显示准确的数据但是在替换mstest特定属性之后同样的类没有用,所以在发布这个questin之后我认为这个方法必须是静态的并且添加了TestContext参数。所以我做了代码更改(以粗体),如下所示,上面的命令运行正常。

MSTest类

private TestContext testContextInstance;  
public TestContext TestContext  
{  
    get { return testContextInstance; }  
    set { testContextInstance = value; }  
}  
[ClassInitialize()]  
public **static**  void ClassInit(**TestContext context**)  
{  
}  

2 个答案:

答案 0 :(得分:1)

您的测试没有失败 - 它们是错误的,这意味着编译测试项目似乎存在问题。如果无法构建和执行测试,您将无法获得保险。

答案 1 :(得分:1)

可能有2个原因,但我怀疑您的过滤器是错误的,如usage过滤器

中所述
(+/-)[assembly/module filter]namespace.typefilter

和排除过滤器优先于包含过滤器

因此-[Bank.*]*+[Bank.Accounts*]*(可能+[Bank*]*)生效之前排除了类型。由于默认过滤器+[*]*仅在您没有其他额外过滤器(默认过滤器除外)时添加,因此您只需要为要分析的模块添加过滤器,即+[Bank.*]*

如果打开XML输出,那么如果过滤掉一个类,则会通过skippedDueTo属性提供一个原因。

另一个原因可能是由于缺少PDB文件不在程序集的文件夹中(某些测试工具将程序集复制到其他文件夹 - 但我看到你正在使用/ noisolation开关 - 所以这不应该是它)< / p>

请随意讨论,或者您认为OpenCover GitHub site

上的问题有很大的提升