私は、チームのために適切なテスト レポート構造を構築するために、取り組んでいるさまざまな 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
実行するバッチ スクリプトにはスペースや書式はありません。読みやすくするために、行間を制限しただけです。
内部は何か問題を引き起こす可能性がありますか?