私たちはVS 2010テストランナー(MSTest)を使用して自動機能テストを行っています。 Visual Studioからテストを実行すると、VSはQTAgent32.exeというプロセスを作成し、そのプロセスでテストを実行します。MSTestにテスト実行ごとに新しいプロセスを使用させることができますか?
複数のテストを実行すると、MSTestは同じQTAgent32プロセスを再利用することがわかりました。プロセスIDは変更されません。テストしているコードは、P /アンマネージDLLへの呼び出しなので、これは私たちのための問題です。 DLLは、プロセスのライフタイム中に1回だけ初期化する必要があります。 [AssemblyInitialize]メソッドがありますが、テスト実行ごとに1回実行されます。複数のテストを実行すると、同じプロセスで2回以上実行されます。
テストを実行するたびに、MSTestは新しいappdomainを作成します。これらのappdomainはすべて同じプロセスにあります。
私は、Visual Studioテストランナーに、テストを実行するたびに新しいプロセスを使用するよう指示する方法はありますか?私は ".testsettings"設定を見たが、関連するものは見なかった。
私の好奇心のために、 'FreeLibrary'を使って連続してテストするたびにアンマネージDLLがアンロードされる可能性はありますか? –
ありがとうWiktor - 良い提案。今のコードでは、C#extern関数宣言の[DllImport]属性を使用して、アンマネージAPIを静的に参照しています。私は、.NETが自動的にライブラリを解放しないと仮定します。これは、appdomainが解体されたときにエラーが発生しているためです。私は実際にC#コードから動的にロードされたDLLを呼び出す方法を知らない - LoadLibrary()とGetProcAddress()を呼び出して、何らかの形で返された関数ポインタをデリゲート型にキャストできますか?とにかく、私はそれを調べます - ありがとう!私はちょうど助けるかもしれないこれを見つけた:http://www.codeproject.com/KB/cs/dyninvok.aspx –