Я использую WatiN и Cassini-dev в своих интеграционных тестах, и мне приходилось сталкиваться с подобными проблемами. В моем установочном приспособлении я развернул свое веб-приложение Asp.Net во временной папке в моей тестовой папке, что позволяет мне поиграться с конфигурацией перед запуском cassini-dev. Я использую Windsor для своего CI, который позволяет мне изменять введенные компоненты на уровне конфигурации. Вы также можете достичь этого с помощью Unity .
Если служба, на которую вы ссылаетесь, является веб-службой, вы просто макетируете веб-службу, используя интерфейс, для которого вы кодировали.
Вот шаги, которые я предпринимаю при выполнении интеграционных тестов:
- Создать временный веб-каталог
- Публикация веб-приложения Asp.Net во временном каталоге (для этого я использую MSBuild)
- Развертывание временной базы данных (используя проекты MSbuild и базы данных, но это можно сделать несколькими способами)
- Развертывание базы данных временного членства (см. Мой пост в блоге о том, как это сделать в коде)
- Обновите web.config развернутого веб-приложения Asp.Net, чтобы он указывал на временные базы данных и изменял любые другие параметры, относящиеся к тестированию.
- Запустите сайт, используя Cassini-Dev. Я также обратился к сайту с запросом http, чтобы убедиться, что сайт работает, прежде чем выполнять какие-либо тесты.
Запустите тесты.
После выполнения тестов вы должны очистить.
- Стоп Кассини-Дев
- Удалить папку временного хостинга
- Удалить временные базы данных. Я использую SMO-объекты Sql-сервера, которые позволяют мне запрашивать Sql-сервер, который я использую для удаления любых старых баз данных, которые остались лежать после любых ранее неудачных тестовых прогонов.
Как развернуть сайт с помощью MSbuild в коде
var properties = new Dictionary<string, string>
{
{"Configuration", isDebug ? "Debug" : "Release"},
{"WebProjectOutputDir", tempHostingDirectory.FullName},
{"DeployToDatabase", "true"},
{"OutDir", Path.Combine(tempHostingDirectory.FullName, "bin\\")}
};
using (var engine = new ProjectCollection(properties))
{
engine
.LoadProject(<web project path>, "4.0")
.Build(new[] {"Build", "ResolveReferences", "_CopyWebApplication"});
}
Использование раздела конфигурации Unity: http://www.pnpguidance.net/Post/UnityContainerUnityConfigurationSectionAppConfigWebConfig.aspx
Создание базы данных членства asp.net в коде: http://bronumski.blogspot.com/2011/06/generating-creating-aspnet-application.html
Msbuild ProjectCollection на MSDN: http://msdn.microsoft.com/en-us/library/microsoft.build.evaluation.projectcollection.aspx