В итоге я создал интерфейс для всех операций с базой данных, 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);
Да, но как бы я указать службу, чтобы использовать эту конкретную базу данных? – Neeta
Вы всегда можете переместить вещи в файл конфигурации. Все, что может быть специфичным для окружающей среды. – ryan1234