С какой платформы модульного тестирования мне следует начать для C # в Visual Studio 2008? (Приложение Windows Forms) - PullRequest
9 голосов
/ 08 октября 2009

ВОПРОС - Если я запускаю приложение Windows Forms в C # с использованием Visual Studio 2008, какую среду модульного тестирования мне следует использовать?

Кажется, есть одна сборка в VS2008? Или я должен посмотреть на что-то вроде NUnit? Или NUnit, что используется в VS2008 под капотом? Что самое популярное

Было бы хорошо иметь что-то, что позволяет: (а) издевательства / заглушки, и (б) способность утверждать исключения

спасибо

Ответы [ 6 ]

8 голосов
/ 08 октября 2009

Я бы рекомендовал использовать NUnit для вашей среды тестирования. Это очень легкий и простой способ доставки, если вам нужно настроить его на сервере сборки. Это не тот случай использования MSTest. Что касается сред насмешек / изоляции, Rhino Mocks имеет самую большую базу пользователей, и вы, скорее всего, найдете ответы на свои вопросы быстрее всего с Rhino Mocks.

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

Мы начали с MSTest. У него есть преимущество, которое (мягко) трудно воспроизвести в NUnit. Это позволяет вам получить доступ к закрытым членам класса. Это неоценимо, когда вы проверяете состояние. Например, скажем, что у меня есть функция, которая помещает записи в словарь, который не отображается. Насколько я понимаю, с NUnit вы должны использовать отражение, чтобы попасть в словарь, или добавить геттер для единственной цели тестирования. Здесь вы можете просто проверить словарь. Очень легко и очень чисто. Это также позволяет вам тестировать частные функции, которые я люблю (я знаю, что некоторые люди не верят в это). Хотя я не люблю MSTest, эта функция значительно облегчает тестирование.

Интеграция VS также хороша.

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

Если это простое приложение, фреймворк MSTest, встроенный в VS2008, должен поставить все галочки. Это не то же самое, что NUnit, хотя многие (по ошибке) называют его так, как будто это одно и то же.

Я никогда не использовал это для насмешек, так что, может быть, кто-то еще может уточнить это. Он создает отдельный проект в вашем решении, предназначенный исключительно для тестирования. Это хорошее объяснение того, как его использовать.

alt text

Edit: Проделав немного больше копания, я наткнулся на это сравнение MSTest и NUnit.

Недостатки NUnit Framework:

  • Установка NUnit осуществляется в отдельном MSI.
  • Нет интеграции с Visual Studio.
  • Требуется написание контрольных примеров вручную.
  • Нет автоматической генерации кода.
  • Требуется открыть отдельное окно (NUnit Console или GUI) для выполнения тестовых случаев.
  • Порядок выполнения тестовых случаев недоступен.
  • Нет встроенной функции для отладки тестовых случаев.
  • Нет встроенной функции для включения / отключения тестовых случаев.
  • Нет встроенной функции для предоставления дополнительной информации о тестовых случаях, таких как трассировка стека, информация о трассировке и т. Д.
  • Нет встроенной функции для сортировки тестовых случаев на основе имени компьютера, имени класса и типа хоста и т. Д.

Это из сравнительной статьи, на которую я ссылался.

Я никогда не использовал NUnit, только MSTest для C # и JUnit для Java, поэтому я немного предвзят в этом отношении. MSTest всегда работал очень хорошо для меня для WinForms , с такими функциями, как возможность запускать тесты индивидуально, показывать действительно подробные отчеты (с отдельными журналами трассировки) и автоматически генерировать весь шаблонный тестовый код и делать все подобные вещей, которые делают VS2008 такой блестящей IDE. Судя по всему, NUnit хорошо работает для других, и у них есть свои причины, почему им это нравится.

Если у вас нет особой причины для применения подхода NUnit / Testdriven.NET, например, если вам нужна определенная функция, или вы просто предпочитаете такой способ настройки тестов и попытки интегрировать его обратно в VS, тогда я не буду увидеть любую причину не просто использовать MSTest, который работает прямо из коробки.

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

Используйте MSTest. Он встроен в VS2008 и имеет поддержку в среде IDE для создания тестовых функций. Если и когда вы «перерастаете» MSTest, то вам стоит взглянуть на NUnit или более современный xUnit . Вы можете ожидать исключения в MSTest, добавив атрибут ExpectedException.

[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void Should_throw_ArgumentNullException_when_the_Order_is_null()
{
    OrderProcessor processor = new OrderProcessor();
    processor.ProcessOrder(null);
}

Фреймворки Mocking не зависят от выбранного вами фреймворка для тестирования. Популярные варианты для насмешливых рамок: Moq и Rhino Mocks .

2 голосов
/ 08 октября 2009

Я бы сказал, для простоты, начните с того, что встроено в Visual Studio 2008. NUnit - это фантастика, и я использую его очень часто, так что вы, вероятно, сможете перейти к NUnit, когда вам будет удобно писать модульные тесты.

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

Ты не упомянул, собираешься ли ты проходить тест-драйв ..

  • Используйте NUnit, если вы не знакомы ни с одной из платформ xUnit. Наименьшая кривая обучения. Это было вокруг дольше. Чарли Пул активен в NUnit (с открытым исходным кодом) и имеет хорошую историю хороших обновлений.
  • VS2008 имеет встроенный MSTest. Это не то же самое, что NUnit. У меня никогда не было причин переключаться с NUnit. Я бы сказал, что у NUnit определенно самая большая база пользователей.
  • В NUnit есть что-то для Mocks, но я бы определенно указал вам на Moq . Rhino Mocks уже некоторое время является лучшей собакой, но у Moq более легкая кривая обучения (из онлайн-документов), хотя он не всегда может обрабатывать крайние сценарии ... пока что ИМХО
  • Утверждение исключений поддерживается в обоих.

Я бы порекомендовал взять тонкую книгу 'Прагматическое модульное тестирование в C # с NUnit' и пройти ее как минимум один раз.

В строке NUnit v MSTest я не пригоден для комментариев. 0 летных времени с MSTest.

  • Хотя я слышал, что VS2010 будет предлагать безделушки, такие как автоматические отчеты о покрытии кода. только , если у вас есть тесты MSTest. Но это тот аргумент, который я продолжаю слышать в пользу MSTests ... подробнее о поддержке IDE и интеграции. Есть отличные надстройки, такие как Resharper и TestDriven, которые могут это исправить, но по цене.
  • Также ИМХО, инструментальные средства Microsoft для модульного тестирования имеют тонкий способ увести вас по темному пути. так что будьте осторожны. Смотрите мой комментарий к Дейлу в этой теме.
...