Ms Test или NUnit?

Есть ли какие-либо преимущества в выборе NUnit для модульного / интеграционного тестирования по сравнению со встроенным MsTest?


person AngryHacker    schedule 25.05.2010    source источник
comment
Аналогичный вопрос есть здесь, в котором я дал ссылку на сообщение в блоге Роя Ошерова, подчеркнув различия.   -  person Paddyslacker    schedule 25.05.2010


Ответы (1)


Они очень похожи. Различия невелики.

  • В NUnit есть тестовые наборы для параметризованных тестов; MSTest - нет.

Ты можешь написать

[TestCase(1, "one)]
[TestCase(2, "two)]
[TestCase(3, "three)]
[TestCase(4, "four)]
public void CanTranslate(int number, string expectedTranslation)
{  
     var translation = _sut.Translate(number);

     translation.Should().Be.EqualTo(expectedTranslation);
}

вместо того, чтобы писать 4 теста или использовать цикл внутри теста. Сообщения об ошибках неудачных тестов будут намного яснее, а результаты тестов всегда удобно сгруппированы.

  • NUnit имеет тенденцию быть более полным и гибким. Например, он поставляется с классным набором атрибутов, например Combinatorial .

Например

[Test, Combinatorial]
public void MyTest([Values(1,2,3)] int x, [Values("A","B")] string s)
{
    ...
}

что эквивалентно запуску тестов

MyTest(1, "A")
MyTest(1, "B")
MyTest(2, "A")
MyTest(2, "B")
MyTest(3, "A")
MyTest(3, "B")

(см. исходную страницу здесь)

  • MSTest всегда создает новый экземпляр тестового класса для каждого выполняемого тестового метода. Это очень полезно, поскольку перед каждым тестом будут запускаться методы Setup и TearDown, и все переменные экземпляра будут сброшены. С NUnit вы должны позаботиться о переменных экземпляра, которые в конечном итоге будут совместно использоваться между тестами (хотя это не должно быть проблемой: хорошо спроектированный тест должен быть изолирован по дизайну)

    • With NUnit an abstract classes can be a test fixtures and you can inherit other test fixtures from it. MsTest does not have this feature.
  • MSTest хорошо интегрирован с Visual Studio. Для эффективной работы с NUnit вам понадобится сторонний плагин, например ReSharper, Test Driven .NET или NCrunch

  • У NUnit есть свободная версия Assert, поэтому вы можете писать

Например

Assert.That(result).Is.GreaterThan(9)

скорее, чем

Assert.Greater(9, result);

С помощью SharpTestEx вы даже можете написать:

result.Should().Be.GreaterThan(9);

и воспользуйтесь преимуществами IntelliSense со строгой типизацией.

person Arialdo Martini    schedule 10.10.2012