Стивен предлагает покончить с сантехникой WCF для испытаний. Это, безусловно, сработает и протестирует большую часть бизнес-логики, но я бы хотел, чтобы мои автоматизированные интеграционные тесты также проверяли взаимодействия WCF.
Я успешно достиг этого в автоматических тестах для моего проекта.
Обратите внимание, что клиент WCF и хост WCF могут совместно использовать один и тот же процесс. В этом случае он все еще выполняет вызовы через инфраструктуру WCF со всеми ограничениями и сложностями. А ваши сервисы WCF извлекут строку подключения из файла конфигурации вашего тестового проекта.
Просто чтобы проиллюстрировать это, вот как может выглядеть файл конфигурации, если клиент и служба находятся в одном процессе.
<configuration>
<connectionStrings>
<add name="ContractsManager"
providerName="System.Data.SqlClient"
connectionString="Data Source=localhost;Initial Catalog=ContractsManager_AutoTest;Integrated Security=True;Pooling=False;Asynchronous Processing=true;Application Name=CmAutoTests"
/>
</connectionStrings>
<system.serviceModel>
<client>
<endpoint
name="LoggingService"
address="net.tcp://localhost:9612/loggingService"
binding="netTcpBinding"
contract="ContractsManager.ILoginService" />
</client>
<services>
<service name="ContractsManager.LoginServiceImpl">
<endpoint
address="net.tcp://localhost:9612/loggingService"
binding="netTcpBinding"
contract="ContractsManager.ILoginService">
</endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
Таким образом, ваши автоматические тесты будут находить ошибки, характерные для WCF (например, выбрасывать исключение, которое не указано в договоре о сбое).
Сегодня меня это спасло: в моем коде была ошибка, из-за которой каналы не закрывались должным образом. Мои тесты продолжали зависать, потому что был достигнут предел дросселирования. Потребовалось некоторое время, чтобы выяснить это, но я благодарен за то, что ошибка не нашла своего выхода в производство.
Ваш тестовый набор должен настроить хосты сервиса до запуска первого теста. (Я пытался настроить и разорвать хосты службы при каждом тесте, но он работает слишком медленно).
Удачи.