我正在使用OpenCover来确定简单C#项目的代码覆盖率。
虽然我可以看到MSTest运行单元测试(并且成功),但生成的报告是空的。
这是我正在使用的命令:
opencover.console.exe -register -arch:32
-target:"%VSINSTALLDIR%\Common7\IDE\mstest.exe"
-targetargs:"/testcontainer:calculatortest.dll"
-filter:+[calculator.dll]* -output:coverage.xml
Microsoft (R) Test Execution Command Line Tool Version 10.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Loading calculatortest.dll...
Starting execution...
Results Top Level Tests
------- ---------------
Passed CalculatorTest.StatisticsTest.AddOccurrenceTest
Passed CalculatorTest.StatisticsTest.AvgTest
2/2 test(s) Passed
Summary
-------
Test Run Completed.
Passed 2
---------
Total 2
Results file: e:\Users\erno\Documents\Visual Studio 2010\Projects\CodeStatistics\CalculatorTest\bin\Debug\TestResults\erno_ERNO01 2011-07-01 14_27_06.trx
Test Settings: Default Test Settings
Visited Classes 0 of 0 (NaN)
Visited Methods 0 of 0 (NaN)
Visited Points 0 of 0 (NaN)
生成的报告的内容:
<?xml version="1.0" encoding="utf-8"?>
<CoverageSession xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<VisitPoints />
</CoverageSession>
代码在Windows 7 64位上运行,但在32位Visual Studio命令提示符环境中执行。
编辑我在使用单元测试的调试版本的目录中运行命令,并将OpenCover目录添加到环境路径。
我在PartCover中搜索了类似的问题(因为OpenCover似乎是一种分支)但找不到与问题匹配的任何内容并提出了解决方案。
编辑我还使用更广泛的过滤器-filter:+[*]*
进行了测试,但这并没有以任何方式改变输出。
编辑我还使用MSTest /noisolation
参数as mentioned here进行了测试。仍然没有结果。
编辑我还通过完全删除过滤器并回退到默认过滤器进行了测试。没有结果。
答案 0 :(得分:7)
您应该能够使用-register:user开关进行每次用户注册,即注册(和取消注册)而无需完全管理员权限。
答案 1 :(得分:0)
休息一下后,我的思绪清醒了,我怀疑OpenCover完成了COM注册,所以我检查了事件日志。
确实COM注册失败了。所以我决定尝试运行命令提示符,因为管理员怀疑我受到了UAC的阻碍
运行包含/noisolation
标志的命令会挂起进程。
如果没有此标志,则会生成并正确填写报告。
我想我会永久注册COM dll,这样我就可以使用我喜欢的任何凭据来运行OpenCover。
我可能会做的另一件事是在OpenCover网站上添加一个问题,说明它正在吞噬异常。 (除非Shaun Wilde读到这个并打败我)
答案 2 :(得分:0)
我在Windows XP上使用NUnit 2.6时遇到了类似的问题。 每个报告都是空白的,直到我添加了神奇的寄存器:user flag。 @ Shaun-Wilde,这面旗帜到底是做什么的?