我最终为我的所有数据库操作创建了一个接口IDatabase
,并创建了一个Database
实现IDatabase
.
然后我创建了一个DatabaseMock
类,它也实现了IDatabase
,但在测试期间应该运行改变的方法体。
使用Unity
并且Moq
我能够配置web.config
主项目的和app.config
测试项目的以在运行时解析绑定:
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<assembly name="Ecommerce_WCF"/>
<assembly name="Ecommerce_WCF_Test"/>
<alias alias="IDatabase" type="Ecommerce_WCF.IDatabase, Ecommerce_WCF" />
<alias alias="Database" type="Ecommerce_WCF.Database, Ecommerce_WCF" />
<alias alias="DatabaseMock" type="Ecommerce_WCF.DatabaseMock, Ecommerce_WCF" />
<container>
<register type="IDatabase" mapTo="Database" />
<!--<register type="IDatabase" mapTo="DatabaseMock" />-->
</container>
</unity>
在container
标签中,根据register type
注释/未注释的内容,它会根据真实类或模拟来解析绑定,您可以根据您是否正在运行/测试进行更改
每当Database
在我的应用程序中使用操作时,我都会使用以下代码:
var unity = new UnityContainer().LoadConfiguration();
var proxy = unity.Resolve<IDatabase>();
proxy.AddNewProduct(product);