2012-04-05 8 views
7

у меня есть тестовый класс следующим образом:Не все тесты выполняются в параметризованных, содержащих массивы NUnit TestFixture

[TestFixture("someurl1", new[] { "param1", "param2" }, 15)] 
[TestFixture("someurl2", new[] { "param3" }, 15)] 
public class my_test 
{ 
    public my_test(string url, string[] fields, int someVal) 
    { 
     // test setup 
    } 
} 

При выполнении этого теста в ReSharper 6.1 и NUnit 2.5.10, тест не выполняется в два раза, а Ожидается, что он запускается только один раз. В результатах тестов я вижу в списке

my_test("someurl1", System.String[], 15) 

Это заставляет меня думать, что эти два приспособления лечитесь как же, и что NUnit не дифференцируя между массивами строк в двух тестах.

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

Невозможно ли иметь TestFixtures с массивами, содержащими разные значения? Я только что обновился от ReSharper 5, поэтому мне интересно, связано ли это. Я прочитал о некоторых проблемах с параметризованными тестами в 6.x.

+0

Работает ли он в бегуне NUnit? – Scroog1

+0

Кроме того, спасибо за указание, что вы можете иметь параметризованные контрольные приборы, поскольку я не знал, что это возможно. – Scroog1

+1

Просто попробовал в бегуне NUnit и успешно выполнил все тесты. Я думаю, что это может быть связано с обновлением ReSharper. –

ответ

0

Я думаю, что это связано с созданием массива в конструкторе TestFixture, где-то я читал, что вы не можете этого сделать.

0

Вы пробовали создавать индивидуальные тесты под ним в качестве общей TestFixture ??? Что-то вроде

[TestFixture] 
public class my_test 
{ 
    private bool my_test(string url, string[] fields, int someVal) 
    { 
     // test setup 
     return DidTestCompleteOk; 
    } 

    [Test] 
    public void TestURL1() 
    { 
     Assert.IsTrue(my_test("someurl1", new[] { "param1", "param2" }, 15)); 
    } 

    [Test] 
    public void TestURL2() 
    { 
     Assert.IsTrue(my_test("someurl2", new[] { "param3" }, 15)); 
    } 
} 
4
[TestFixture("someurl1", "param1|param2", 15)] 
[TestFixture("someurl2", "param3", 15)] 
public class my_test 
{ 
    private string[] _fields; 

    public my_test(string url, string fieldList, int someVal) 
    { 
     _fields = fieldList.Split('|'); 
     // test setup 
    } 

    [Test] 
    public void listFields() 
    { 
     foreach (var field in _fields) 
     { 
      Console.WriteLine(field); 
     } 
    } 
} 
0

Оказывается это сообщение абсолютной ошибки, если что-то пойдет не так в конструкторе Параметризированной испытательной арматуры в. Вы не получите фактическую информацию об исключении, как при сбое материала в другом коде.

Поэтому вы, вероятно, должны переместить свой код установки в [SetUp] или [TestFixtureSetUp] или, вернее, убедитесь, что ваш конструктор выполняется без ошибок. Но на самом деле вы должны сделать первое предложение и сохранить параметры теста в конструкторе и сделать что-то с ними по другому методу.

Смежные вопросы