Есть ли какие-либо преимущества в выборе NUnit для модульного / интеграционного тестирования по сравнению со встроенным MsTest?
Ms Test или NUnit?
Ответы (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 со строгой типизацией.