2013-04-29 4 views
11

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

У нас есть что-то (или подобным образом) в качестве гипотетической идеи:

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

http://www.nunit.org/index.php?p=parameterizedTests&r= 2.5.5 – Oded

+1

Непонятно, почему вы пытаетесь параметризовать * setup *, а не * test *. –

+0

после этой настройки тесты выполняют ту же работу. вероятно, имеет смысл принять этот бит в тест и сделать тест параметризованным! – dushyantp

ответ

17

Установка выполняется один раз для каждого теста, и для одного теста есть только один SetUp и TearDown. Вы можете назвать свой метод Initialize из тестов явно, а затем создать Data-Driven тестов с использованием 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 с различными параметрами

+0

спасибо, это кажется более разумным, чем то, как я пытался. – dushyantp

2

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

26

Это может быть сделано с помощью Атрибут 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()); 
    } 
} 
Смежные вопросы