Skip to content

Добавить ReplaceVariables на максимально возможное число параметров (лучше все )) #173

Open
alexius595 opened this issue Jul 12, 2021 · 3 comments
Labels
enhancement New feature or request

Comments

@alexius595
Copy link

Случаи, когда было бы полезно применять ReplaceVariables ко всем параметрам

  1. Then я сохраняю дату {day}.{month}.{year} в формате "{format}" в переменную "{varName}" - format - можно было бы хранить в переменной, + можно было бы одну дату сохранить в другом формате например

Then я сохраняю дату {{MyDate}} в формате "{{MyFormat}}" в переменную "MyFormattedDate"

  1. Then я подставляю значение переменной ""(.+)"" в текст ""(.*)"" и сохраняю в переменную ""(.+)"""

из-за того что текст не заменяет переменные пришлось делать шаг

[StepDefinition(@"я заменяю в переменной ""(.+)"" текст ""(.*)"" на ""(.+)""")]
    public void ReplaceTextInVar(string varName, string text, string replacement)
    {
        text = _variableContext.ReplaceVariables(text);
        replacement = _variableContext.ReplaceVariables(replacement);
        _variableContext.CheckVariableByKey(varName).Should().BeTrue();
        _variableContext.SetVariable(varName, typeof(string), _variableContext.GetVariable(varName).Value.ToString().Replace(text, replacement));
    }
  1. Все шаги работы с БД - уже обсуждали достаточно экзотичный кейс, но есть потребность передавать имя коннекшен из переменной
  2. Шаги типа [Then(@"я убеждаюсь, что значение переменной ""(.+)"" начинается с ""(.+)""")] можно было бы использовать в таоком виде

Then я убеждаюсь, что "Info:{{Boy}} любит {{Girl}}" начинается с "{{MesType}}:{{LoveMessage}}"

  1. Не всегда очевидно где будет replace, а где нет - приходится лазить в исходники или пробовать

В целом очень сильно добавляется гибкости, учитывая возможность использования функций типа {{Trim(Mystr)}}

@egorsh0
Copy link
Collaborator

egorsh0 commented Jul 12, 2021

  1. Придется увеличивать сценарий для хранения доп форматов. И что это за кейсы, когда можно использовать несколько форматов? Почему тогда не использовать Scenario Outline со встроенными Example для разных форматов?

  2. Данный шаг был реализован одной из команд для их собственных нужд напрямую в AFT и был в патче переноса. За корректный вариант спасибо - будет внесен в патч

  3. Из-за кастомного способа создания подключения надо думать о корректности выполнения Replace. Нужен сбор данных о целесообразности замен в подключениях при одном и нескольких базах
    Ибо если идет подключение лишь к одной базе, то данная функциональность нецелесообразна в принципе

  4. тогда уж лучше
    я убеждаюсь, что значение ""(.+)"" начинается с ""(.+)""
    Это недоработка - будет поправлено в ближайшем патче

  5. Все функции, где идет сравнение со значением используется Replace. В текущих реалиях некоторые функции могут быть не переведены, но это редкость. Т.е все шаги Then и в редких исключениях Given для создания
    Решение - документация, которая пишется медленно

@alexius595
Copy link
Author

  1. а) Формат может и один, но получить его можно с помощью функции... Например в зависимости от текущего или нужного Culture
    б) Формат может один, а использоваться может несколько раз, менять проще в одном месте (outline не всегда подходит)
    в) Взять исходную дату (не формат) из переменной сейчас нельзя

  2. Просьба всё же добавить, т.к. сделан большой функционал с использованием функции для получения имени коннекшена и хочется иметь возможность использовать и встроенные шаги молдера. Кроме того что обсуждалось, сейчас готового кейса не скажу, но уверен, что есть случаи, когда данные по БД получают на лету (из файла, другой БД, сервиса...)

@egorsh0
Copy link
Collaborator

egorsh0 commented Jul 13, 2021

  1. если меняется culture для сценария, то это отдельный сценарий! Ненужно вставлять условия в сценарии - specflow не для этого (тогда были бы шаги IF)
    если нужно у переменной менять формат, то адекватнее
    "я получаю дату {{data}} в формате "(.+)" и сохраняю в переменную (.+)"
    что позволит брать или сохраненную в переменной дату, или фиксированную в DataTime и выдавать в нужном формате. Как раз функционал замены. Ибо шаг замены значения переменной есть, но он не полный
    Ибо шаги на именно создание DateTime есть
    На преобразование string -> datetime - нет (добавить можно)

@egorsh0 egorsh0 added the enhancement New feature or request label Jul 13, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants