2013-04-04 6 views
39

私はMSTestを使用しています。TestCategory属性を各メソッドに個別に設定せずに、テストクラス内のすべてのメソッドに対して同じテストカテゴリを設定します。これはどうすればできますか?クラス内のすべてのテストのテストカテゴリの設定方法

TestCategory属性をクラスに設定するのが最も便利で明白な方法ですが、メソッドにのみ適用できます。

最終的な目標は、TFSチェックインでのテスト実行中の統合テストをスキップすることです。

+3

興味深いです。 TFSテストで動作する属性を持つクラスのすべてのメソッドをマークすることは可能ではないと考えてください。 TFSはTestCategoryとPriorityを理解しており、これらの属性はメソッド固有のものです。統合テストを別のプロジェクトに移動し、TFSを実行しないように指し示すことができます。 – nikita

+2

ユニットと統合テストを2つの異なるアセンブリに分けて、それに応じてビルドを構成できますか? –

+0

さて、私たちには数十のライブラリがあり、それぞれにユニットテストと統合テストの両方を含む対応するテストライブラリがあります。それぞれをユニット用ライブラリと統合テスト用ライブラリに分割することは可能ですが、最もエレガントなアプローチのようには見えません。 – alex

答えて

2

この制限を回避する1つの方法は、テストカテゴリを各テストメソッドの先頭に置くことです。たとえば、あなたが統合テストを得るためにあなたのTFSのクエリを実行するときに

Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]

が、操作を行うことができ、あなたのユニットが

public void IntegrationTestDoSomething_ExpectThis() 

その後

public void UnitTestDoSomething_ExpectThis() 

とあなたの統合テストをテストの名前これは完璧な解決策ではなく、コードとTFSのテストを区別するのに役立ちます。また、領域と反復のパスを見ることもできます。

+0

しかし、複数のカテゴリではどうしますか? – Dagrooms

2

[テストエクスプローラ]パネルに[クラス名]でグループ化できます。

TestCategory属性では、C#の属性がメタデータであり、動的値として使用できないため、問題を解決できません。

4

究極の目標は、TFS チェックインでのテスト実行中の統合テストをスキップすることです。

これを行う方法は他にもあります。あなたのTFSビルドでyou can set which unit tests you want to run, depending on their assembly name.

デフォルトの動作として、名前に "test"を持つアセンブリですべての単体テストが実行されます。簡単な修正は、統合テストの名前を "テスト"を含まないものに変更することです。


あなたはカテゴリを使いたいならば、あなたはAOPを使用して試みることができます。たとえば、Postsharpを使用すると、統合テストアセンブリ内に、puts the attribute on the methodというアスペクトを作成できます。すべてのテストが1つのdllまたは各統合テストクラスにグループ化されている場合、統合アセンブリ内のすべてのパブリックメソッドのアスペクトを有効にします。

5

私はこれまで同様のことをしていましたが、自分の目的に合った解決策を見つけました。

これは、あなたは完全にの一部を一致させるために検索文字列を指定するmstestため/test:コマンドライン引数を使用することができますないは、クラス単位でをTestCategoryを適用する問題を解決しないが、テストのメソッド名資格。これは、クラス、ネームスペース、またはターゲットテストと一致する到着可能な検索文字列と一般的に一致することを意味します。それができない場合は、/test:引数を複数回使用できます。すなわち:

> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace 
    /test:My.FullyQualified.OtherNamespace.OtherClass 

More Info

関連する問題