2

現在、UnityとMOQを使用して、WCFの単体テストを行っています。アプリケーションのコードには、次のものがあります。

private void MyMethod()
{
.....
.....
    _proxy = new UnityContainer().LoadConfiguration().Resolve<IMyInterface>();
.....
}

アプリケーションのapp.configには、次のものがあります。

<container>
  <register type="IMyInterface" mapTo="MyActualObject" />
</container> 

単体テストのapp.configで、これをプロキシのモックオブジェクト実装に置き換えます。

<container>
  <register type="IMyInterface" mapTo="MyMockObject" />
</container> 

それはすべて正常に機能しています。しかし、私がさらにやりたいのは、特定のテストについてです。MyMockObjectを別のモックオブジェクト実装に置き換えたいと思います。

実行時に登録されたタイプを変更することは可能ですか?実行時にアプリケーション構成を変更しようとしましたが、変更を検出できません。

 Configuration appConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 var section = (UnityConfigurationSection)appConfig.GetSection("unity");
 section.Containers[0].Registrations[0].MapToName = "AnotherMockObject";
 appConfig.Save();  

ありがとう!!

4

1 に答える 1

3

はい、可能です。

Unityは何度でも設定できます。競合がある場合は、最新の定義が優先されます。

ランタイムを変更する場合は、構成ファイルの代わりに流暢なAPIを使用してください。次のようなものを試してください。

IUnityContainer container = new UnityContainer();
container.LoadConfiguration();
container.RegisterType<IMyInterface, AnotherMockObject>();

// use AnotherMockObject
_proxy = Resolve<IMyInterface>();

タイプとタイプマッピングの登録に関するドキュメント

于 2012-04-26T04:52:57.263 に答える