Модульный тест, NUnit или Visual studio? - PullRequest
114 голосов
/ 12 октября 2009

Я использую Visual studio (иногда resharper) для запуска моего модульного теста.

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

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

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

Ответы [ 10 ]

97 голосов
/ 12 октября 2009

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

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

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

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

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

49 голосов
/ 12 октября 2009

Вот мой опыт с MS Test

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

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


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

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

18 голосов
/ 12 октября 2009

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

альтернативный текст http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802

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

См. http://nunitit.codeplex.com/ для получения дополнительной информации об импорте.

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

5 голосов
/ 15 октября 2009

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

3 голосов
/ 12 октября 2009

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

1 голос
/ 12 октября 2009

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

1 голос
/ 12 октября 2009

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

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

0 голосов
/ 06 июня 2018

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

0 голосов
/ 17 июля 2014

Если вы используете Visual Studio, вы должны использовать NUnit для выполнения модульного тестирования, а если вы используете Java (NetBeans), вы должны использовать JUnit для модульного тестирования.

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

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");

        }
    }
}
...