Они очень похожи. Различия неуловимы.
- 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 со строгой типизацией.