Как использовать MSTest и NUnit?
Чтение о MSTest и NUnit Я не мог решить, что использовать в моем проекте. Мы используем TFS 2008 и VS2010.
Мне нравится MSTest из-за его интеграции в отчеты VS2010, Continuous Integration и Code Coverage.
Мне нравится NUnit, потому что он позволяет с готовностью формулировать сложные утверждения в виде.
Наткнувшись на http://alsagile.com/archive/2010/03/09/stop-the-war-between-nunit-and-mstest-make-them.aspx Я спрашиваю сообщество: можно ли использовать оба?
Я также думаю о том, чтобы придерживаться MSTest и использовать http://fluentassertions.codeplex.com, чтобы дать мне более гибкий способ формулировки утверждений assert. Разве это не лучший вариант?
Ответы
Ответ 1
Мне лично не нравится идея смешивания двух фреймворков, как это упоминалось в статье, на которую вы ссылаетесь.
Возможным условием сделать ваш unit test запущен в обеих тестовых средах может быть то, что вы не хотите или не можете установить Visual Studio на свой сервер непрерывной интеграции.
Только для пояснений MSTest не является областью тестирования модулей Visual Studio, определенной в сборке Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
.
Чтобы позволить вашему unit test работать в обеих фреймворках, вам нужно будет определить константу сборки (здесь NUNIT
) и с помощью препроцессорные директивы и псевдонимы пространства имен, вы получите такой сниппп:
#if !NUNIT
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Category = Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute;
#else
using NUnit.Framework;
using TestInitialize = NUnit.Framework.SetUpAttribute;
using TestContext = System.Object;
using TestProperty = NUnit.Framework.PropertyAttribute;
using TestClass = NUnit.Framework.TestFixtureAttribute;
using TestMethod = NUnit.Framework.TestAttribute;
using TestCleanup = NUnit.Framework.TearDownAttribute;
#endif
Я считаю, что впервые натолкнулся на эту идею через эту статью MSDN Magazine. Еще одно полезное сообщение в блоге, охватывающее эту тему:
К вашему последнему вопросу: Проект Fluent Assertions кажется хорошей библиотекой. Я не вижу никаких реальных причин, почему вы не должны использовать его, если вам нравится его свободный стиль.
Ответ 2
Добавьте ссылку на nunit.framework и следующую строку вверху вашего класса MSTest-тестера...
using NAssert = NUnit.Framework.Assert;
Теперь вы можете использовать либо...
// Test whether a new SimplexInterpreter was created
[TestMethod]
public void SimplexInterpreterConstructorTest()
{
Assert.IsNotNull(target);
NAssert.IsNotNull(target);
}
Ответ 3
У вас может быть один тестовый проект с использованием MSTest, а другой - с помощью NUnit. Если вы хотите смешивать оба в одном проекте, вам придется придерживаться общих функций и использовать директивы компилятора и использовать операторы для "переименования" и компиляции для определенных.
Вам нужно будет запускать как nunit, так и mstest, хотя бы выяснить, действительно ли все ваши тесты проходят, поэтому я настоятельно рекомендую не пытаться использовать их. Выберите один.
Если вы хотите запускать тесты на сервере сборки, вероятно, лучшим вариантом будет NUnit, если вы не хотите устанавливать VS на свой сервер сборки. TFS может работать без установки VS, но вам нужно будет проверить свою документацию.