2012-03-09 18 views
11

私は問題を抱えているようですが、私たちが使っているアプリケーションはNinjectカーネルを使い、WCF呼び出しの内容(ユーザー名、トークン... )。NUnitで別のappdomainでユニットテストを実行する

特定の設定に基づいて、ユーザにはアプリケーションの権利が割り当てられます。これは、Ninjectカーネルの特定のインスタンスによって保護されます。

Ninjectカーネルを再構成することはできません.Nunitテストを2回実行し、別々のアプリケーションドメインで実行します(毎回異なる設定でカーネルを再作成します)。

私は、さまざまなアプリドメインでテストプロジェクト全体を実行する方法しか見つけられませんでしたが、テストごとにテストはしません。

これを解決する方法はありますか?

残念ながら、Ninject設定は私たちの側にはありません。私たちはこの方法で「生きる」必要があります。

答えて

5

NUnitコードの一部を書き換えることなく解決する方法はないと思います。私がNUnitコードの中にいたのはしばらくありましたが、主なアプリドメインの読み込み部分が変更されていないことは間違いありません。

通常、NUnitは2つのアプリドメインを使用します。 NUnitが実行されたときに作成されるデフォルトのものと、テストアセンブリとそれが参照するアセンブリをロードする別のものです。これを行う主な理由は、テストアセンブリのアンロードを可能にすることです。 DLLをアンロードすることはできませんが、appdomainをアンロードすることはできます。

テストごとにNUnitを1回実行し、テストをコマンドラインで渡すことは可能かもしれませんが、それは醜いので、それが役に立ちそうです。

NUnit 2.6にAction Attributesを利用することもできますが、そこでは多くの作業を行う予定です。

また、セットアップメソッドで新しいアプリドメインを作成して、各テストで呼び出すこともできます。不自然だが可能。

私はもっと完全な答えはありません。

1

あなたの質問は完全にわかりません。しかし、何らかのカスタム実装が必要なようです。カスタムテストの属性を検討しましたか?次に、それぞれの属性を異なるApp Domainで実行するように設定することができますか?私はいくつかのアイデアをスピンアップしていますが、これを行うためのより良い方法があるかもしれません。

+1

のxUnitはデフォルトでこれを行います... –

25

全く同じことをする必要があったので、私は基本的に現在のテストを受け取り、新しいAppDomainでそれを再実行するライブラリを作成しました。これはNUnit.ApplicationDomainと呼ばれるナゲットパッケージで、open sourceです。

コード例:

[Test, RunInApplicationDomain] 
public void Method() 
{ 
    Console.WriteLine("I'm in a different AppDomain") 
} 
関連する問題