21

何らかの理由でユニットテストができない、または必要のないクラスがいくつかあります。これらのクラスをカバレッジメトリックから除外して、実際に関心のあるクラスのカバレッジをよりよく理解できるようにしたいと思います。今のところ、事後の結果を除外する必要があります。私がやりたいのは、属性を使用してそれらのクラスを除外済みとしてマークし、最初から含まれないようにすることです。 カバレッジ分析から自動的に除外する属性でクラスを装飾する方法はありますか? VSカバレッジ分析またはnCoverのいずれかが機能します。

FWIW、これらはコードが正しいことを検査することで自分自身を保証できるクラスです。ほとんどの場合、これらは、フレームワーククラスをモックアウトできるようにするために導入した既存のフレームワーククラスのラッパークラスです。ラッパーはモックアウトされるため、テストされません。私が気にかけているフレームワーククラスのメソッドをラップするだけなので、問題ありません。

4

3 に答える 3

31

VS2010以降、がありExcludeFromCodeCoverageAttributeます。コメント提供者は、これがNCoverおよびDotCover+NUnitで機能することを指摘しています。使用例:

[ExcludeFromCodeCoverage]
public class myUntestableClass
{ }

このリンクも参照してください。彼らは、コマンドラインツールとしてVSInstrを使用することを提案しています。これには/ EXCLUDEオプションがあります(それほど便利ではありません)。

于 2010-04-07T21:15:56.817 に答える
7

いくつかの診断属性DebuggerNonUserCodeAttributeDebuggerHiddenAttributeに関する情報を見つけました。これらの属性を使用すると、VSのカバレッジアナライザーがこれらを結果から除外することを示しています。DebuggerNonUserCodeAttributeで試してみましたが、機能しているようです。私が考えているほとんどのクラスでは、おそらくこれと一緒に暮らすことができますが、これらのクラスに足を踏み入れることができないという副作用は好きではありません。これはラッパークラスにとっては問題ではないはずですが、本質的にテストが難しく、デバッガーがアクセスする必要があるクラスでは問題になる可能性があります。

しかし、私はまだ代替案を探しています。

于 2009-08-17T18:13:56.133 に答える
5

NCoverを使用すると、属性を作成してから、NCoverにその属性を無視するように指示できます。

私たちのプロジェクトでは、この属性を定義しました(名前空間がないため、使いやすいです)。

public class CoverageExcludeAttribute : Attribute { }

NAntを使用しているため、次のようなターゲットがあります。

<target name="unittests" description="run nunit tests" >        
    <ncover
        ....
        excludeAttributes="CoverageExcludeAttribute"
    />
</target>

NCover FAQの質問9は、 この方法を説明しています。これに基づいてソリューションを作成しました。

または、NCoverExplorerの除外機能を使用して、名前空間とアセンブリを最終レポートから除外することもできます。これは単にレポートからデータを削除するだけですが、最終的な結果は同じです。

両方の手法を使用します。

于 2009-08-19T23:25:28.873 に答える