Как передать параметр в TestCleanup метод

День добрый.
Есть куча тестов. В каждом тесте создается новый элемент с рандомный именем. На текущий момент я в конце каждого теста вызываю метод для удаления созданного элемента и передаю в него имя.
Проблема заключается, что возникла необходимость избавиться от этого в каждом тесте и вынести этот процесс в TestCleanup метод.
Вопрос состоит в следующем, каким образом в TestCleanup метод передать параметорм мя элемента для удаления?

Код Clean метода

 public void Clean(string templateName)
        {

            ClickDeleteTemplate(templateName);
            ClickConfirmDeleteTemplate();
        }

Простой тест

public void RenameTemplate()
        {
            ...

            cpiMainPage.Invoke();

            cpiModel.CreateTemplate(templateName);
            cpiModel.RenameTemplate(templateName, newTemplateName);
            var isTemplateRenamed = cpiMainPage.IsElementExistInTheTree(newTemplateName);

            Assert.IsTrue(isTemplateRenamed, "Template is not found");

            cpiMainPage.Clean(newTemplateName);
        }

А нету возможности использовать фиксированное имя шаблона?

Нет, фиксированное имя мне не подходит. Тесты проходят в несколько потоков и нужно уникальное имя.

кладите в статичную переменную имя и в cleanup методе обращайтесь к ней

Добавил статическую переменную. Сделал метод Clean статическим

public static void Clean(string templateName)
        {
            var element = Driver.FindElement(By.XPath("//p[text()='" + templateName + "']/../following-sibling::div[contains(@class, " +
                                                "'DataTree-actions-container')]//button[@data-test-element-id='delete-template']"));
            element.Click();
            btnConfirmDeleteTemplate.WaitUntilVisible().Click();
        }

Теперь получаю следующие ошибки внутри метода

значит где-то ещё надо статики добавить

Если вы используете Dependency Injection, то можно имя шаблона сохранять и потом его вытаскивать в том методе.
Еще как вариант, можно использовать несколько уникальных имен (для каждого теста свое). Тогда во время очистки проверять, какое из имен присутсвует и такое и удалять.
А статические переменные лучше не использовать, они могут сломать параллельное выполнение тестов.

вешаете на статику [ThreadStatic] и ничего не ломается 🤷

1 лайк

А разве в MSTest нет аналогичного NUnit’у TestContext? В который можно что угодно положить и оно будет до конца теста там храниться.