1

MsTest 用に作成された統合テストがいくつかあります。統合テストの構造は次のとおりです。

[TestClass]
public class When_Doing_Some_Stuff
{
    [TestInitialize]
    protected override void TestInitialize()
    {
        // create the Integration Test Context
        EstablishContext();

        // trigger the Integration Test 
        When();
    }

    protected void EstablishContext()
    {
        // call services to set up context
    }

    protected override void When()
    {
        // call service method to be tested
    }

    [TestMethod]
    public void Then_Result_Is_Correct()
    {
        // assert against the result
    }
}

誰がそれを呼び出しているかによって、関数のコード カバレッジ結果をフィルター処理する必要があります。つまり、関数が「When」という名前の関数から呼び出された場合、または特定の属性が適用された関数から呼び出された場合にのみ、カバレッジが考慮されるようにします。

これで、システム内の特定のメソッドが一部のテストの EstablishContext 部分で呼び出された場合でも、そのメソッドはアクセス済みとしてマークされます。

これにはフィルターはないと思います。OpenCover は...まあ..オープンなので、自分で変更したいと思います。しかし、どこから始めればよいか本当にわかりません。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

1

これについては、OpenCover の開発者と話し合ったほうがよいかもしれません。うーん...それは私です。Wikiを見ると、テストによるカバレッジが OpenCover の最終的な目的の 1 つであることがわかります。

フォークを見ると、mancau からのブランチが表示されます - 彼は当初、この機能を実装しようとしていると述べていましたが、彼がどこまで進歩したか、または彼の試みを放棄したかどうかはわかりません (彼が提出したものは呼び出しのトレースを可能にするコードのほんの少しの再導入)。

OpenCover は、訪問識別子を出力し、共有メモリ (プロファイラー (C++/ネイティブ/32-64 ビット) とコンソール (C#/managed/any-cpu) の間で共有) に存在する配列内の次の要素を更新することによって追跡します。私が彼に提案したのは (そして、もし他の誰もそうしないなら、これが私のアプローチになるでしょう) そして、彼はシーケンスにマーカーを追加して彼は特定のテスト メソッド (おそらく [TestMethod] 属性でフィルター処理) に出入りし、コンソールで結果を処理するときに、何らかの方法でモデルに追加することができます。スレッド化は、並行して実行されるテストの訪問ポイントのインターリーブを引き起こす可能性があるため、問題になる場合もあります。

おそらく、あなたは別のアプローチを考えるでしょう。私はあなたのアイデアを聞くのを楽しみにしています.

于 2011-12-22T00:08:45.247 に答える