为了获得为我的团队构建的体面的测试报告结构,我一直致力于在我工作的一些各种 API 的本地构建中实现OpenCover 。但是,当尝试针对我的 NUnit 测试运行覆盖率时,我发现生成的报告中省略了我的一些更重要的类,并且将各个对象的访问节点设置为 false。
我仍然收到正确的 NUnit 结果,并且知道我期望的覆盖结果是由于运行 Visual Studio 的内置工具来验证的。只是OpenCover无法正确报告。
正如我发现的那样,这些对象中的任何一个都未报告的共同点似乎是它们已被密封。我猜OpenCover正在跳过这些类,并对其报告结构使用某种类型的反射,但我没有机会查看源代码来证明这一点,因为我在一个非常严格的内部网络上。
有人遇到类似的事情或有任何技巧来克服这个问题吗?当然,我不能只从我的类中删除sealed关键字,因为他们需要它。
编辑*这是我写的一个类似的例子:
using System.Text;
using NUnit.Framework;
namespace OpenCover.Sealed.Test
{
using Helpers;
[TestFixture]
public class UtilityTest
{
[Test, Owner("Patrick Ramser")]
public void ConcatTest()
{
Utility utility = Utility.CreateNewUtility();
string concatMsg = utility.Concat
("1:{0} 2:{1} 3:{2}", "FIRST", "SECOND", "THIRD");
Assert.AreEqual
(concatMsg, "1:FIRST 2:SECOND 3:THIRD", "Wrong message returned!");
}
}
}
namespace OpenCover.Sealed.Helpers
{
public sealed class Utility
{
internal Utility()
{
}
public static Utility CreateNewUtility()
{
return new Utility();
}
public string Concat(string message, params string[] lstStrings)
{
StringBuilder builder = new StringBuilder(message);
for (int i = 0; i < lstStrings.Length; i++)
{
builder.Replace("{" + i + "}", lstStrings[i]);
}
return builder.ToString();
}
}
}
当同时使用 NUnit 和新的测试程序集时,我只是参考:
D:\exes\OpenCover\OpenCover.Console.exe
-target:"D:\TestRunners\nunit.console.exe"
-targetargs:"/nologo /domain=Single /xml=C:\NUnit\Artifacts\nunit-results.xml
D:\OpenCover.Sealed.Test\bin\Debug\OpenCover.Sealed.Test.dll"
-output:"C:\NUnit\Artifacts\coverage.xml"
-register
-filter:"+[OpenCover.Sealed*]*"
-returntargetcode
我运行的批处理脚本没有空格或格式,我只是将其限制在行之间以使其更具可读性。
内部结构是否会造成任何问题?