私の状況
ASP.NET MVC4 アプリケーションにテストを入れています。私が開発しているアプリの一部は、最新の WebSecurity/SimpleMembershipProvider と段階的に廃止されているレガシー認証システムを組み合わせています。これについて適切な単体テストを行いたいと思っていますが、実際的な理由から、WebSecurity をモックまたはスタブアウトしないことを選択しています。私はそれをテストデータベースに向けているだけです。*
問題:
WebSecurity.InitializeDatabaseConnection()
NUnit を使用して、メソッドを使用して、一連のテスト用に WebSecurity をセットアップしたいと考えています。このメソッドは、できればアプリの起動時に 1 回だけ実行するように設計されています。
InitializeDatabaseConnection
テストを分離し、データベースを消去して、各テストの前に (つまり、[Setup]
メソッド内で)呼び出したいと思います。ただし、WebSecurity は Initialized 状態を静的に維持します。つまり、同じアプリ インスタンスで複数回実行されると、例外がスローされます。
つまり、最初のテストだけが機能します。後続のものは例外をスローします。
System.InvalidOperationException : The "WebSecurity.InitializeDatabaseConnection" method can be called only once.
質問:
1 つのアプリ インスタンスで複数回初期化できるように、WebSecurity を「初期化解除」する方法はありますか? あるいは、NUnit が特定のフィクスチャで各テストの前にアプリを再起動する必要があることを示す方法はありますか?
ノート:
メソッドまたは aWebSecurity.InitializeDatabaseConnection()
で 1 回呼び出すだけで、テスト間で関連するテーブルを消去するだけでしたが、クリーンな状態を保証することを本当に望んでいます。さらに、このアプローチには残念な副作用があります。NUnit GUI を使用していくつかのテストを順番に実行し、さらにいくつかのテストを順番に実行したい場合、シーケンス間でアセンブリをリロードする必要があります。GUI はこれらのセットアップ メソッドをテスト シーケンスごとに 1 回実行しますが、アセンブリがリロードされるまで同じアプリ インスタンスを維持しているようです。[TestFixtureSetup]
[SetUpFixture]
* 結局、私は WebSecurity をモックすることにしました。以下の私の自己回答を参照してください。