2009-11-30 11 views
5

複雑なVS2008ソリューションでは、3つのユニットテストプロジェクトがあります。同じテストデータベース上で動作するため、テストプロジェクトが順番に実行されることが重要です。どちらのプロジェクトが最初に始まるかは重要ではありません。ソリューション内のすべてのテストを実行する場合の単位テストシーケンス

  • は、私がテストリストのテストは、プロジェクトによって順序付けられ.vsmdiファイルを持っている:私はそれらすべてを実行したい場合は

    は、異なる結果につながることを行うには、いくつかの方法があります。リストを開いてテストリストエディタからテストを実行すると、すべて正常です。

  • [テストビュー]ウィンドウを開いて、プロジェクトごとにテストを並べ替えて実行しても、すべて正常です。
  • しかし、メニューから[テスト - >実行 - >すべてのテストをソリューション]を選択してテストを実行すると、他のテストプロジェクトの1つがすでにテストを操作しているため、 db。

したがって、3番目のアプローチを使用する際にユニットテストシーケンスを決めるのはどういう意味ですか? .testrunco​​nfigにデフォルトのテストリストを指定する方法はありますか?

回避策があるため、この問題はまったく重要ではありません。しかし、どんな考えも大歓迎です。おかげさまで

答えて

8

インタラクティブテストと呼ばれる単体テストの匂いが発生しました(xUnit Test Patterns)。具体的には、共有フィクスチャがあります。これは、いくつかのテストで同じ共有データベースが使用され、以前のテスト実行の結果に依存するという別の方法です。

これは反パターンであり、すべてのコストをかけて回避する必要があります。この本は、このような状況に対処する方法に関する広範なガイダンスを提供しています。

私がこれを説明することから始める理由は、これがMSTestがテストの順序付けを保証しない理由であるということです。注文は(半)決定的に見えるかもしれませんが、あなたはそれに頼ることはできません。いくつかの他のユニットテストフレームワーク(xUnit.NETが思い浮かぶ)では、テストスイートを実行するたびにランダムな順序でテストを実行することさえ可能です。 MSTestはそれほど極端ではありませんが、単体テストを注文する方法はありません。

Visual Studio Team Suiteを実行している場合、またはTeam Testを実行している場合は、というテストの種類があります。。これを使用して、すべてのテスト(ユニットテストを含む)を特定の順序で実行するように指定することができます。

+0

共有施設を避けるべきだと私は完全に同意します。しかし、ここでの問題はテストの順番ではなく、テストプロジェクトが並行して実行されることで、dbのセットアップとティアダウンの同期に関する問題につながります。私はそれについて十分に詳しく説明しませんでした。私は今、最良の解決策はdbのグローバルなセットアップとティアダウンだと思います。 – Wullie

+0

私はMSTestが並行してテストを実行するとは思わない - 少なくとも、それは私の経験ではない。 –

関連する問題