MSTestを使用して非同期コードをテストするにはどうすればよいですか


88

私はいくつかの非常に単純な非同期コードを書いています。ファイルをオフスレッドで保存するだけです。

Microsoft Visual Studio Team System2008のMSTest単体テストフレームワークを使用してこのコードをテストしたいと思います。

どうすればよいですか?

メソッドが戻るまで、テストメソッドを単純にブロックしたいと思います。これを行う方法はいくつか想像できますが、これに関するベストプラクティスやヘルパークラスがないことに驚いています。

Silverlightはよく見かけますが一般的なものはありません。


4
重複しますか?stackoverflow.com/questions/1174702/...(私が提供する回答はそのまま使用するフレームワークをテストしているに関連していないと思う)
フレドリックモルク

1
はい、そうです-そして答えは私が思うのと同じでしょう。
Andras Zoltan 2010年

回答:


162

Visual Studio 2012(以前は「VisualStudio 11」と呼ばれていました)では、非同期テストのサポートが導入されました。次のようになります。

[TestMethod]
public async Task FooTest()
{
   var result = await SomeAsyncOperation();
   Assert.IsTrue(someCondition);
}

コメントに記載されているようにTask戻り値の型は重要です。メソッドを戻り値として宣言した場合は機能しませんvoid


58
Task戻り値の型は必須であることに注意してください-機能しvoidません(少なくともVS2013アップデート4では機能しません)
Ohad Schneider

3
void-returning asyncメソッドを待つことができないため、 機能しません)
Richard Szalay 2016

1
@RichardSzalay:それは仕事に行うことができ、NUnitのは、それをしない方法をここで参照してください。stackoverflow.com/questions/15031681/...
ヴィム・クーネン

-3

System.IOメソッドを直接呼び出す代わりに、代わりにSystemWrapperライブラリを使用してみてください。次に、テストで、必要に応じて呼び出しをモックアウトし、エラー状態を含め、好きなものをテストに戻し、ロジックが期待どおりに機能することを確認できます。

例を見たい場合は、RhinoMocksでどのように使用できるかを示すこのブログ投稿をご覧ください。


3
私は、質問への答えとしてこれを見ていない
SteveC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.