我目前正在使用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();
谢谢!
答案 0 :(得分:1)
是的,可能。
您可以根据需要多次配置Unity。如果存在冲突,则最新的定义会获胜。
在您的情况下,如果要进行运行时更改,请使用fluent API而不是配置文件。尝试这样的事情:
IUnityContainer container = new UnityContainer();
container.LoadConfiguration();
container.RegisterType<IMyInterface, AnotherMockObject>();
// use AnotherMockObject
_proxy = Resolve<IMyInterface>();
的文档