私はそのようなコンストラクタのセットを持っています:
public BusinessObjectContext()
: this(CloudStorageAccount.FromConfigurationSetting("DataConnectionString").TableEndpoint.ToString(),
CloudStorageAccount.FromConfigurationSetting("DataConnectionString").Credentials) {}
public BusinessObjectContext(string dataConnectionString)
: this(CloudStorageAccount.Parse(dataConnectionString).TableEndpoint.ToString(),
CloudStorageAccount.Parse(dataConnectionString).Credentials) { }
public BusinessObjectContext(String baseAddress, StorageCredentials credentials)
: base(baseAddress, credentials) { }
ただし、テスト/モッキングするときは、接続文字列パラメータのないオブジェクトが必要です。どうすればこれを行うことができます-Moqが望ましいですか?
これはまったく可能ですか?
コードの匂いがあるように聞こえます- コンストラクターがあまりにも多くの作業を行っている 。この記事には、このようなシナリオに対する一連の修正が含まれています。基本的には、答えはonlyコンストラクタで割り当てを実行することであり、ビジネスロジックを実行しないことです。
var myMockBOC = new Mock<BusinessObjectContext>(null, null);
これにより、2つのパラメーターにnullが渡されます。
別のアプローチは、テストでの使用のみを目的とした内部コンストラクターを作成し、 InternalsVisibleTo
を使用して、テストアセンブリで使用できるようにすることです。残念ながら、これには大きな欠点があります。アセンブリに署名した場合、 Moqはコンストラクターを使用できません です。これはMoqの4.0リリースで対処されることになっています。
コンストラクターパラメーターを使用したくない場合は、モックするときにIt.IsAny()メソッドで渡すことができます。 null値が渡されます。 nullを書き込む代わりにこのメソッドを使用すると、はるかに読みやすくなります。