#c# #.net #specflow #configurationmanager
#c# #.net #specflow #configurationmanager
Вопрос:
Я пытаюсь воссоздать свой шаг BeforeTestRun, чтобы запустить мою настройку только один раз за все выполнение, а не за поток.
Я просмотрел пользовательские шаги развертывания, некоторые из которых я уже реализовал, но для моей настройки мне нужно ввести некоторые значения из файла app.config, я пытаюсь что-то вроде этого
мой файл Default.srprofile содержит:
<DeploymentTransformation>
<GlobalSteps>
<Custom type="Test.CustomDeploymentStep, Test"></Custom>
</GlobalSteps>
</DeploymentTransformation>
и мой CustomDeploymentStep.cs:
public class CustomDeploymentStep : IDeploymentTransformationStep
{
public static string baseUrl;
public void Apply(IDeploymentContext deploymentContext)
{
baseUrl = ConfigurationManager.AppSettings["URL"];
}
public void Restore(IDeploymentContext deploymentContext)
{
DoSomething();
}
}
Конфигурация моего приложения содержит следующее:
<add key="URL" value="http://google.com" />
Но это не работает, ConfigurationManager.AppSettings
возвращает только один ключ и одно значение
"key" : "TestProjectRetargetTo35Allowed" "value":"true"
Как я могу загрузить свою конфигурацию из app.config в Apply()
метод в CustomDeploymentStep?
Также, если есть лучший / более эффективный способ генерации предопределенных данных в specflow с потокобезопасным выполнением, пожалуйста, дайте мне знать
Комментарии:
1. Не так ли
ConfigurationManager.AppSettings
— множественное число?2. Это действительно опечатка
3. Глупый вопрос, но используете ли вы .NET Framework или .NET Core?
4. @GregBurghardt NET Framework
5. Можете ли вы добавить больше app.config к своему вопросу?
Ответ №1:
Я столкнулся с той же проблемой, когда мне понадобилось использовать пользовательские шаги развертывания в нескольких проектах в большом решении. Похоже, это ошибка в TechTalk.SpecRun.Фреймворк. Вероятно, ошибка «Ошибка при применении шага глобального развертывания. Глобальные шаги не могут содержать настройки, специфичные для тестовой сборки.» и если вы заглянете внутрь TestAssembly во время отладки, вы увидите, что TestAssemblyConfigFilePath равен нулю и / или проглатывает другое исключение.
Он не регистрирует файл конфигурации, специфичный для проекта. Мой обходной путь заключался в том, чтобы сохранить файл конфигурации в debug и получить доступ к тому, что мне нужно, вот так:
string appConfigFilePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) "\App.config";
ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = appConfigFilePath;
var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
var baseUrl = config.AppSettings.Settings["URL"].Value;
Комментарии:
1. Не могли бы вы просмотреть мой ответ и признать его полезным? Это устраняет вашу проблему.
2. Эй, извините за поздний ответ, это действительно решает проблему выше, спасибо