2012-03-02 4 views
0

NinjectとMoqを使用してASP.NET MVC 3用の単体テストクラスを設定する方法については、すべてテストクラスの内部にモックリポジトリを構築する必要があります。ASP.NET MVC 3、Ninject、Moq:単体テストクラスの外部で模擬リポジトリをインスタンス化する

私がやってみたいのは、アプリケーションの起動時や読み込み時に、おそらくGlobal.asax.csのモックリポジトリをビルドして、これを代わりにテストクラスに渡すことです。そうすれば、ユニットテストクラスを変更することなく、Ninject AllBindings()メソッドのセッション状態リポジトリまたはデータベースリポジトリに変更できます。私はすでに、アプリ起動でこれを持っている:

ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

私もglobal.asax.csでBINDコマンドを入れて把握することができるが、どのようにそれをテストクラスに渡されますでしょうか? [テスト]> [実行]を選択すると、global.asax.csも実行されますか?どのようなコンテキストがテストクラスを呼び出すのかわからないと思います。私はこれを行う方法を頭で囲むことはできません。リポジトリを最初に作成してからテストクラスに渡す例は見ていません。

可能かどうか、どうすればできますか?アドバイスを事前にありがとう!そう、おそらくGlobal.asax.csで - - 、代わりに私のテストクラスにこれを渡し、私が何をしたいのですがどのような

答えて

3

は、アプリの起動や負荷 のモックリポジトリを構築しています。

ええと、待って、私はあなたがユニットテストの全体のポイントを欠いていると思います。単体テストは、実行中のASP.NETアプリケーションに関連しない別のプロジェクトに存在します。 Global.asaxは、ASP.NETアプリケーションでのみ使用されます。

ユニットテストでは、ASP.NET固有のクラスに頼ることなく、異なるクラスのシステムを個別にテストする必要があります。また、これらのクラスがリポジトリやサービスレイヤに応じたコントローラなどの他の層に依存する場合は、モックフレームワークを使用してこの依存関係への期待を定義してコントローラを単独でテストすることができます。これは、依存関係が、模擬することができるインタフェースまたは抽象クラスを介して表現されている場合にのみ機能します。

+0

Ah!今私は私の頭を包み込むことができます。それを明確にしていただきありがとうございます! –

1

Global.asaxを使用する代わりに、あなたのテスト用の基本クラスまたはソート用のtetstユーティリティクラスを作成できます。あるいは、テストのためにNInjectを落として、テストで手作業で依存性注入を行うこともできます。私は、ほとんどのテストでは手動でアプローチすることをお勧めします。

と言われています。テスト用のベースクラスを作成することを選択した場合は、そこにすべてのNInjects設定を行い、そこでテストクラスを継承することができます。そうすれば、すべてのテストの前にNInjectテストを実行することができます。 Xunit.NETを使用すると、これは次の行に沿って表示されます。

public class TestBase 
{ 
    public TestBase() 
    { 
     // Ninject setup for tests 
    } 
} 

public class ATestClass : TestBase 
{ 
    [Fact] 
    public void ATestCase() 
    { 
     // do your test using the test Ninject setup 
    } 
} 
関連する問題