1

Rhino Mocks 3.6 を使用しています

プライベートコンストラクターを持つクラス「Configuration.cs」があります(シングルトン実装用に行いました)。今、私はこのクラス(部分モック)をモックしたいのですが、それを行うことができません。エラー:

クラスのプロキシをインスタンス化できません: Efi.CrmIntegration.MonarchServices.Utilities.Configuration。パラメーターなしのコンストラクターが見つかりませんでした。パラメータ名: constructorArguments

同じための解決策は何ですか。

4

1 に答える 1

3

静的シングルトンはモックやテストが難しく、理想的には避けるべきです。RhinoMocks が指摘したように、構成シングルトンの部分的なモックを作成することはできませんが、いくつかのオプションがあります。

  1. プライベート コンストラクターをパブリックにします。ただし、これは簡単なハックと見なす必要があります。これを行うには、もっと良い方法があります。

  2. シングルトンのインスタンス化方法を変更します。Configurationあなたのクラスにインターフェースを与えてくださいIConfiguration。に静的Instanceプロパティがすでにある可能性がありConfigurationます。タイプを に変更しIConfiguration、パブリック セッターを指定します。単体テストでは、モックまたはスタブを作成し、プロパティをそれにIConfiguration設定します。Configuration.Instanceこれはまだハックのようなものです (ただし、すでにシングルトンを使用しているクラスが多数あり、次のオプションを実装する時間がない場合に役立ちます)。

  3. 依存性注入を使用します。Configurationあなたのクラスにインターフェースを与えてくださいIConfiguration。シングルトンに依存するクラスは、コンストラクターでパラメーターConfigurationを取るように変更する必要があります。IConfigurationこれらのクラスのいずれかのインスタンスを作成するときは、 のシングルトン インスタンスを挿入しますConfiguration。テストするときは、 type のモックまたはスタブを作成IConfigurationし、代わりにそれをクラスに渡します。これは、Castle Windsor や Ninject などの依存性注入フレームワークで改善できます。これを使用して、静的シングルトンの必要性を完全になくすことができます。

設計を変更し、オプション 3 を使用することを強くお勧めします (可能であれば、依存性注入フレームワークを使用します)。

于 2013-06-26T16:32:10.853 に答える