Метод установки метода Nunit с аргументом

Можем ли мы установить метод тестирования с аргументами? Мне нужна другая настройка для каждого теста в приборе.

Есть ли у нас что-то (или подобное) в качестве гипотетической идеи:

[SetUp]
[Argument("value-1")]
[Argument("value-2")]
[Argument("value-3")]
public void InitializeTest(string value)
{
    //set env var with value
}

Ответ 1

Настройка выполняется один раз для каждого теста, и для одного теста есть только один SetUp и TearDown. Вы можете вызывать свой метод Initialize из тестов явно, а затем создавать тесты с использованием данных с использованием атрибута TestCase

public void InitializeTest(string value)
{
    //set env var with value
}

[TestCase("Value-1")]
[TestCase("Value-2")]
[TestCase("Value-3")]
public void Test(string value)
{
    InitializeTest(value);

    //Arange
    //Act
    //Assert
}

В результате у вас будет три теста, каждый из которых вызывает InitializeTest с различными параметрами

Ответ 2

Это можно сделать, используя атрибут TestFixture с параметром.

Если все тесты в классе зависят от одного и того же параметра, это путь.

Для класса потребуется конструктор с тем же параметром, который передается атрибуту TestFixture.

См. Параметрированные тестовые приборы на https://github.com/nunit/docs/wiki/TestFixture-Attribute

[TestFixture("Oscar")]
[TestFixture("Paul")]
[TestFixture("Peter")]
public class NameTest
{
    private string _name;

    public NameTest(string name)
    {
        _name = name;
    }

    [Test]
    public void Test_something_that_depends_on_name()
    {
        //Todo...
    }

    [Test]
    public void Test_something_that_also_depends_on_name()
    {
        //Todo...
    }
    //...
}

Этот код находится на веб-сайте документации nunit:

[TestFixture("hello", "hello", "goodbye")]
[TestFixture("zip", "zip")]
[TestFixture(42, 42, 99)]
public class ParameterizedTestFixture
{
    private readonly string eq1;
    private readonly string eq2;
    private readonly string neq;

    public ParameterizedTestFixture(string eq1, string eq2, string neq)
    {
        this.eq1 = eq1;
        this.eq2 = eq2;
        this.neq = neq;
    }

    public ParameterizedTestFixture(string eq1, string eq2)
        : this(eq1, eq2, null)
    {
    }

    public ParameterizedTestFixture(int eq1, int eq2, int neq)
    {
        this.eq1 = eq1.ToString();
        this.eq2 = eq2.ToString();
        this.neq = neq.ToString();
    }

    [Test]
    public void TestEquality()
    {
        Assert.AreEqual(eq1, eq2);
        if (eq1 != null && eq2 != null)
            Assert.AreEqual(eq1.GetHashCode(), eq2.GetHashCode());
    }

    [Test]
    public void TestInequality()
    {
        Assert.AreNotEqual(eq1, neq);
        if (eq1 != null && neq != null)
            Assert.AreNotEqual(eq1.GetHashCode(), neq.GetHashCode());
    }
}

Ответ 3

Метод настройки используется для выполнения некоторых заданий preTest, которые включают подготовку к тесту, например, установку любых значений, необходимых для запуска теста, вы можете установить их внутри метода установки вместо предоставления значений в качестве параметров.