#c# #selenium-webdriver #nunit #nunit-3.0
#c# #selenium-webdriver #nunit #nunit-3.0
Вопрос:
Я просматриваю некоторый тестовый код с использованием NUnit, который наследуется от базового класса, содержащего атрибут [SetUp]:
public class BaseClass
{
[SetUp]
public void SetUp()
{
//do something
}
}
[TestFixture]
public class DerivedClass : BaseClass
{
[OneTimeSetUp]
public void OneTimeSetUp()
{
//do something here only once for the tests in this fixture but after BaseClass [Setup] method execution.
}
//tests run down here.
//[Test]
//[Test]
//etc
}
Метод [OneTimeSetUp] вызывается перед методом базового класса [Setup]. Есть ли возможность вызвать if после метода базового класса [Setup]. Я бы хотел, чтобы сначала выполнялся метод базового класса [Setup], а затем метод [OneTimeSetUp] вызывался только один раз для всех тестов в производном классе [TestFixture] . Метод [Setup] должен выполняться один раз перед каждым тестом в классе [TestFixture]. Спасибо.
Ответ №1:
Когда вы используете наследование, это означает, что связь между производным классом и базовым классом является одной из is a
, т.Е. Экземпляр производного класса является базовым классом. Для практических целей все это одно. Если вы не хотите, чтобы это произошло, не используйте наследование.
В этом случае вы выполняете тесты для DerivedClass . Он получает некоторые методы из самого класса и наследует другие. Используя наследование, вы можете контролировать порядок выполнения методов, помеченных одним и тем же атрибутом. Например, метод SetUp в базовом классе будет выполняться перед методом SetUp в производном классе.
Однако методы, отмеченные каждым отдельным атрибутом, выполняются в то время, когда они должны выполняться. OneTimeSetUp выполняется один раз перед выполнением тестов в классе. Установка выполняется перед каждым отдельным тестом.
Не совсем понятно, чего вы пытаетесь достичь здесь, но если вы хотите, чтобы что-то было сделано один раз после вызова первой установки, вы можете использовать метод SetUp в производном классе со статическим флагом, используемым для его выполнения только один раз.
Тем не менее, если вы объясните, чего вы пытаетесь достичь, может быть более чистый способ сделать это.
Комментарии:
1. Большое спасибо, Чарли, за подробный ответ. Метод настройки базового класса — это создание экземпляра Selenium WebDriver, инициализация отчетов NLog и Extent. Я хотел бы запускать его один раз перед каждым тестом в производном тестовом классе fixture . В то время как внутри устройства производного тестового класса я хотел бы выполнить общие начальные шаги тестирования, чтобы выполнить один раз для всех тестов внутри этого устройства производного тестового класса. Надеюсь, понятно, чего я хотел бы достичь. Спасибо
2. Используя статический метод настройки в производном классе, я не смогу получить доступ к нестатическим членам базового класса, которые мне понадобятся.
3. @melleck Я вообще не предлагал статический метод. Скорее статический флаг, на который ссылается ваш метод. Я отредактирую свой ответ с помощью примера.
4. Можете ли вы привести пример того, что вы хотите сделать в одноразовой настройке производного устройства?
5. общие шаги тестирования для методов тестирования в производном устройстве, такие как: 1. Войдите в приложение с пользователем. 2. Перейдите в Настройки. 3. Перейдите к пользователям. Затем в методах тестирования используется тот же сеанс драйвера selenium. 1. Добавьте нового пользователя. 2. Заполните форму пользователя. 3. Отправьте пользовательскую форму. 4. Подтвердите успешное создание пользователя. Повторите шаги тестирования 1-4, чтобы создать несколько пользователей с помощью TestCaseSource.