2009-03-12 11 views
25

アセンブリ内の各テストの前に特定のメソッドを実行することはできますか?MsTest - アセンブリ内の各テストの前にメソッドを実行

私は約TestInitialize属性を知っていますが、この属性には「クラススコープ」があります。 Testクラスに定義されている場合は、このクラスの各テストの前に実行されます。

アセンブリ全体で定義された各テストの前に実行されるメソッドを定義します。

答えて

11

この機能は、他のテストフレームワーク(例えばMbUnit)のようなMsTestではすぐに使えるとは確信していません。

MsTestを使用する必要がある場合は、抽象クラスTestBaseを[TestInitialize]属性で定義して解決します。この動作が必要なすべてのテストは、この基本クラスから派生しています。あなたのケースでは、あなたのアセンブリのすべてのテストクラスは、このベースから継承する必要があります...

おそらく別の解決策がありますが、カスタムテスト属性を作成することができますが、まだ試していません... :)

0

あなたはClassInitialize属性を探していると思います。

+2

ClassInitializeは、すべてのクラスのために一度実行されます。したがって、クラスで5つのテストがある場合、ClassInitializeを使用するメソッドは1回実行されます。 – brzozow

+2

ええ、彼はおそらくTestInitializeを意味していました。 –

1

各テストのクラスをインスタンス化するMSTestはありませんか?それが私の理解でした。そのような場合、コンストラクタから呼び出すものは、初期化コード(定義ごとのテストごと)です。

編集:それが動作しない場合(MSTestは個々のテストメソッドの実行が分離されていることを確認する必要があると考えています)、TestInitializeがあなたの属性です。ところで、最良の単体テスト比較はLink on Codeplexで利用可能です。

+0

すべてのテストクラスですべてのテストの前に実行されるコードを記述したいと思います。したがって、あなたのソリューションは1つのテストクラスでのみ動作します – brzozow

+0

いいえ、それは真ではありません。 MSTestハーネスがテストごとに新しいテストクラスインスタンスをインスタンス化することが正しければ(テスト分離目的に当てはまると思う)、各テストメソッドの前にコンストラクタのコードが実行されます。 –

+0

あなたが書いたことは本当ですが、それは私の問題を解決していません。私は各テストの前にいくつかの静的なプロパティをリセットしたい(私はそれが悪いデザインだと知っている)。ユニットテストでは400クラスあります。私はすべてのクラスにそのコードを書いてはいけません。 – brzozow

52

[TestInitialize()]が必要です。

private string dir; 

[TestInitialize()] 
public void Startup() 
{ 
    dir = Path.GetTempFileName(); 
    MakeDirectory(ssDir); 
} 

[TestCleanup()] 
public void Cleanup() 
{ 
    ss = null; 
    Directory.SetCurrentDirectory(Path.GetTempPath()); 

    setAttributesNormal(new DirectoryInfo(ssDir)); 
    Directory.Delete(ssDir, true); 
} 


[TestMethod] 
public void TestAddFile() 
{ 
    File.WriteAllText(dir + "a", "This is a file"); 
    ss.AddFile("a"); 
    ... 
} 

[TestMethod] 
public void TestAddFolder() 
{ 
    ss.CreateFolder("a/"); 
    ... 
} 

これにより、テストごとに新しいランダムな一時パスが作成され、完了したら削除されます。これを確認するには、デバッグで実行し、各テストケースのdir変数を調べます。

+3

この1つのクラスからtestを実行する前にStartUpメソッドが呼び出されます。私はアセンブリのすべてのクラスからすべてのテストの前にメソッドを実行したい – brzozow

+1

FTQ "各テストの前に特定のメソッドを実行できますか?"私はそれに答えた。あなたが意味することは、 "すべてのテストの前に一度だけ実行されるメソッド"であれば、あなたの答えはここにあります:http://stackoverflow.com/questions/639326/mstest-executing-method-before-each-test/639339#639339 – FryGuy

+1

答えはThx。しかし、アセンブリの各テストの前にメソッドを実行したいと思います。たぶん私の質問が十分ではなかったかもしれない。 – brzozow

関連する問題