0

Ninject を利用するデモ Web API アプリケーションを作成しました。アプリケーションを実行して、定義されたルートに移動し、期待するデータを取得できるため、アプリケーションは正常に動作します。ここで、ApiController をテストするための単体テストの追加を開始します。

新しい ApiController をインスタンス化するにはどうすればよいですか? を使用してvar sut = new DogsController();いますが、「... 0 引数を取るコンストラクターが含まれていません」というエラーが発生します。引数が 0 のコンストラクターがないのは正しいのですが、Ninject がそれを処理してくれるはずですよね?これを解決するにはどうすればよいですか?

4

2 に答える 2

1

単体テスト プロジェクトではなく、Ninject を Web API アプリケーションに接続します。その結果、Ninject はコントローラーの依存関係を作成しません。また、コントローラーを明示的に作成しているため、コントローラーでさえも作成しません (Web API アプリケーションでは、フレームワークがコントローラーを作成します)。

Ninject を単体テスト プロジェクトに配線することはできますが、それは正しいことではありません。既知の状態でテストでコントローラーを作成する必要があるため、既知の依存関係を渡すか、何らかの形式のモック依存関係を渡す必要があります。

于 2013-05-11T22:29:36.837 に答える
0

DI コンテナーは、"new Something()" を記述するたびにコードを変換する魔法のようなものではありません。単体テストでは、手動でコントローラーを新しくしています (これは良い習慣です) が、これは、コンストラクターが期待する抽象化の適切な偽のバージョンをコンストラクターに提供する必要があることを意味します。

于 2013-05-12T10:45:08.020 に答える