Как использовать атрибут SetUp(OneTimeSetUp), TearDown(OneTimeTearDown) однажды за прогон тестов

Есть два теста, написанных в таком виде:

public class CreateAppointment : Base
{
    [Test]
    public void CreateAppoitment()
    {
        //....
    }
}

public class CreateEncounter: Base
{
    [Test]
    public void CreateAppoitment()
    {
        //....
    }
}

public class Base
{
    [OneTimeSetUp]
    public void Start()
    {
       //...
    }
    [OneTimeTearDown]
    public void TestEnd()
    {
        //...
    }
}

Не могу сделать чтобы SetUp выполнился один раз перед первым тестом и TearDown после второго. Данный код запускает SetUp и TearDown при выполнения каждого теста.


Ответы (2 шт):

Автор решения: Pavel Leonik

Проблема в том что я создаю драйвер в базовом классе и потом его юзаю. И чтобы сократить время тестов я хочу создать драйвер в начале и "убить" его в конце прогона.

public class TestA: Base
{
    [Test]
    public void TestA()
    {
        driver.FindElement(By.Id("a"));
    }
}
public class TestB: Base
{
    [Test]
    public void TestB()
    {
        driver.FindElement(By.Id("b"));
    }
}
public class Base
{
    public IWebDriver driver;
    [OneTimeSetUp]
    public void Start()
    {
       driver = new ChromeDriver(new ChromeOptions());
    }
    [OneTimeTearDown]
    public void TestEnd()
    {
       driver.Quit();
    }
}
→ Ссылка
Автор решения: Андрей NOP

Используйте атрибут SetUpFixture для отдельного класса, при этом наследование вам не нужно.

using NUnit.Framework;

namespace NUnit.Tests
{
    [SetUpFixture]
    public class MySetUpClass
    {
        [OneTimeSetUp]
        public void RunBeforeAnyTests()
        {
            // ...
        }

        [OneTimeTearDown]
        public void RunAfterAnyTests()
        {
            // ...
        }
    }
}

В таком случае тестовый фреймворк выполнит сначала метод, помеченный OneTimeSetUp, в классе, помеченном SetUpFixture, потом все тесты в этом неймспейсе и потом метод, помеченный OneTimeTearDown

→ Ссылка