2012-09-20 4 views
35

私はこの問題に苦労しています。TestInitializeとTestCleanupでマークされたクラスは実行されません

MSTESTを使用してユニットテストを作成する一方で、私は、各試験において同じコードを繰り返した発見し、そして便利な属性(TestInitializeTestCleanupClassInitialize、及びClassCleanup)のカップルを発見しました。

これらの属性のいずれかを使用してメソッドをマークすると、自動的に実行されます(各テストの前、各テストの後、すべてのテストの前、およびすべてのテストの後)。悔しいことに、これは起こらず、私のテストは失敗しました。 TestMethod属性のクラスから直接これらのメソッドを呼び出すと、テストは成功しました。彼ら自身が実行していないことは明らかでした。

[TestInitialize()] 
private void Setup() 
{ 
    _factory = new Factory(); 
    _factory.Start(); 
} 

を、なぜこれが実行されていません。ここで

は私が使っていたいくつかのサンプルコードですか?彼らはprivateているとき、彼らは実行しない

[TestInitialize()] 
public void Setup() 
{ 
    _factory = new Factory(); 
    _factory.Start(); 
} 

答えて

84

トリックは、これらのメソッドpublicようにすることです。

+3

静的な場合でも動作しません。 – stuartdotnet

+0

@Stefan de Kok:私はそれを見落とした信じられない。ヒントありがとう! – christoph

+1

また、非同期の場合は動作しません。 – andrew

9

TestInitializeとTestCleanupは、すべてのテストの前後に実行されます。各テストの前後には実行されません。間違っている

、例えばこのリンクを参照してください。 http://social.msdn.microsoft.com/Forums/en-US/vststest/thread/85fb6549-cbaa-4dbf-bc3c-ddf1e4651bcf

は、サンプルコードがTestInitialize、ClassInitialize、およびAssemblyInitializeを使用する方法を示し

http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.classinitializeattribute.aspx

MSDN

も参照してください。

1

私もこの問題を抱えていました。メソッドがどのように呼び出されたか誤解していました。これを使って解決しました。TestInitializeメソッドとTestCleanupメソッドを含むクラスから継承します。