Unit test, NUnit или Visual studio?

Я использую Visual Studio (иногда resharper) для запуска unit test.

Я слышал о NUnit, но я не знаю много об этом...

Должен ли я заботиться об этом? Может ли это предложить нечто лучшее, чем визуальная студия?

Должен ли я использовать NUnit и почему?

Ответ 1

NUnit имеет несколько преимуществ перед MS-тестом

  • Атрибут Suite - может собирать тесты и выполнять их отдельно (полезно для крупных проектов с быстрым и медленным тестом, например)
  • Метод Readable Assert, например. Assert.AreEqual(expected, actual) vs Assert.That(actual, Is.EqualTo(expected))
  • NUnit имеет частые обновления версий. MS-Test имеет только одну версию VS.
  • Многие интегрированные проигрыватели, включая Resharper и TestDriven.NET
  • Ожидаемое утверждение сообщения об ошибке - может быть выполнено с использованием атрибута в NUnit, но должно выполняться с помощью Try-Catch в MS-Test
  • [TestCase]! NUnit позволяет проводить тесты с параметрами.

Ответ 2

С моей текущей точки зрения (после 8 месяцев разработки с примерно 10 разработчиками в среднем) я бы посоветовал против использовать MSTest по следующим причинам

  • Структура сама по себе довольно медленный. Я не имею в виду тестовый код, который вы пишете - что под вашим контролем. Я имею в виду рамки, тесты проводятся медленно, независимо от того, набор тестов, одиночные тесты и т.д.
  • Необходимо сохранить файл Test-Metadata что всегда приводит к осложнениям когда работают несколько разработчиков на нем (воссоздание, например, метаданных и т.д.). В каждом другом наборе тестов нет нужен файл метаданных. Это своего рода приятно организовать ваши тесты, но вы может достичь того же путем пространства имен, классы и имена методов.
  • Выполняя непрерывную интеграцию, если вы хотите запускать модульные тесты на вашей машине сборки, вам нужно будет установить Visual Studio на этом компьютере.

Другими словами, если бы я снова решил 8 месяцев назад, я бы, вероятно, взял NUnit. У меня может не быть отчета об интегрированных тестах, но у разработчиков будет более плавное тестирование.

Ответ 3

Вот мой опыт работы с MS Test

  • Мы тестируем MS Test с тестом около 3800.
  • Для тестирования требуется очень много времени, чтобы начать выполнение, что является болезненным при запуске одиночных тестов.
  • Для выполнения тестов требуется около 1 ГБ памяти. Нет, это не из-за утечек памяти в наших тестах. Часто мы сталкиваемся с OutOfMemoryExceptions.
  • Поскольку он использует этот большой ресурс, мы начинаем выполнять тесты из пакетных файлов. Итак, для чего нужна вся интеграция?
  • Он глючит и нестабилен:
    • Например, если вы удаляете атрибут [Игнорировать] из теста, он не распознает его, потому что он кэширует информацию о тестах где-то. Вам нужно обновить тестовый список, который иногда решает проблему или перезапускает VS.
    • Он случайным образом не копирует сборки ссылок в каталог.
    • Элементы развертывания (дополнительные файлы, которые будут использоваться) просто не работают должным образом. Они игнорируются случайным образом.
  • В файлах vsmdi и testrunconfig содержится скрытая (не отображаемая в тестовом коде) информация. Если вас это не волнует, это может не сработать.
  • Функционально это может быть сопоставимо с NUnit, но это очень дорого, если вы считаете, что используете версию VS тестера.

Дополнение: Теперь у нас есть еще несколько тестов, даже не могу сказать, сколько. Их невозможно запустить из Visual Studio из-за OutOfMemoryExceptions и других проблем с нестабильностью. Мы запускаем тесты из сценариев. Было бы легко просмотреть результаты тестов в Visual Studio, но когда решение открыто, VS сбой (каждый раз). Поэтому нам нужно искать неудачные тесты с помощью текстового поиска. Больше нет преимущества интегрированного инструмента.


Другое обновление. Сейчас мы используем VS 2013. Многое изменилось. Они перезаписали тест-тест MS Test в третий раз с момента начала. Это вызвало множество изменений, но ни одна новая версия не делала ничего лучше. Мы рады, что мы не использовали причудливые функции MS Test, потому что они больше не поддерживаются. Это позор. Мы все еще используем скрипты для создания и запуска всех модульных тестов, потому что они более удобны. Visual Studio потребовалось несколько минут, чтобы начать выполнение тестов (временные меры после компиляции до начала первого теста). Вероятно, они исправляют это с обновлением, и это может быть конкретной проблемой нашего проекта. Тем не менее, Resharper намного быстрее при выполнении тех же тестов.

Заключение. По крайней мере, в сочетании с Resharper, MS Test полезен. И я надеюсь, что они, наконец, узнают, как должен быть написан тестовый бегун, и не будем делать такого рода нарушения при обновлении Visual Studio в следующий раз.

Ответ 4

NUnit можно использовать в комбинации с визуальной студией. Это не отдельная программа. Таким образом, вы можете позаботиться о том, подходит ли вам:).

alt text http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802

"После установки плагина вы найдете новое подменю в меню инструментов.

Дополнительную информацию об импорте см. http://nunitit.codeplex.com/.

Кроме того, многое можно найти, используя поиск SO. В этом разделе перечислены преимущества стандартного тестирования NUnit over MS.

Ответ 5

Самое большое преимущество MS-Test над NUnit - MS-Test может генерировать макетные объекты с использованием Reflection. Я нашел это очень полезным

Ответ 6

NUnit работает со стандартной версией VS.

Ответ 7

NUnit является структурой модульного тестирования, которая также поддерживается Resharper. Я думаю, что вы используете среду модульного тестирования Microsoft, поэтому NUnit - это просто альтернатива продукту Microsoft;)

Вот ссылка на домашнюю страницу NUnit: http://nunit.org

Ответ 8

Я не уверен в других, но NUnit предоставляет приятный графический интерфейс и консоль для запуска ваших тестов устройств, а также вы можете генерировать отчет о результатах выполнения NUnit Test, который даст подробную информацию о том, что тест не прошел или прошел, а также что это потребовалось для вашего unit test

Ответ 9

В NUnit тесты не выполняются параллельно. Скорее, кажется, что все тесты выполняются в одном потоке. В MSTest каждый тест создается в отдельном потоке, что приводит к чередованию циклов. Поэтому, если тест A зависит от теста B на его успешность, он, скорее всего, потерпит неудачу, так как тест B, скорее всего, начнет выполняться, когда тест A выполняется.

Ответ 10

Если вы используете Visual Studio, вам нужно использовать NUnit для выполнения unit test, а если вы используете java (Netbeans), вы должны использовать JUnit для unit test.

Вот пример простого калькулятора unit test

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SimpleCalculator;
using NUnit.Framework;

namespace CalculatorTest
{
    [TestFixture]
    public class Class1
    {
        public Calculator _calculator;
        [TestFixtureSetUp]
        public void Initialize()
        {
            _calculator = new Calculator();
        }
        [Test]
        public void DivideTest()
        {
            int a = 10;
            int b = 2;
            int expectedValue = a / b;
            int actualvalue = _calculator.Divide(a, b);
            Assert.AreEqual(expectedValue, actualvalue,"Failure");

        }
    }
}