1

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

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 特定属性后相同的类没有工作,所以在发布这个问题后,我认为这个方法必须是静态的并添加了 TestContext 参数。所以我做了代码更改(粗体),如下和上面的命令工作正常。

MSTest 类

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

2 回答 2

1

您的测试没有失败——它们出错了,这意味着编译测试项目似乎有问题。如果无法构建和执行测试,您将无法获得覆盖率,这是理所当然的。

于 2012-03-07T21:04:53.630 回答
1

可能有两个原因,但是我怀疑您的过滤器是错误的,如过滤器的使用中所述

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

并且排除过滤器优先于包含过滤器

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

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

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

请随时讨论,或者如果您认为OpenCover GitHub 站点上存在很大的问题

于 2012-03-07T22:30:05.387 回答