Ms Test или NUnit? - PullRequest
       27

Ms Test или NUnit?

0 голосов
/ 25 мая 2010

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

1 Ответ

2 голосов
/ 10 октября 2012

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

  • 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 вы должны позаботиться о переменных экземпляра, которые в конечном итоге будут разделены между тестами (хотя это не должно быть проблемой bis: хорошо спроектированный тест должен быть изолирован по проекту)

    • С помощью NUnit абстрактные классы могут быть тестовыми объектами, и вы можете наследовать другие тестовые объекты от него. MsTest не имеет этой функции.
  • 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 со строгой типизацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...