SpecFlow / BDD для модульных тестов? - PullRequest
25 голосов
/ 11 ноября 2010

Похоже, что в интернете нет однозначного ответа или набора принципов, которые помогут мне ответить на вопрос.Поэтому я обращаюсь к великим людям на SO, чтобы помочь мне найти ответы или руководящие мысли:)

SpecFlow очень полезен для BDD в .NET.Но когда мы говорим о BDD, мы просто говорим об интеграционных / приемочных тестах или о модульных тестах - полная замена TDD?

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

Теперь к вам ..........

РЕДАКТИРОВАТЬ:Я забыл упомянуть, что вижу RSpec в сообществе RoR, которое использует синтаксис в стиле BDD для модульного тестирования.

Ответы [ 6 ]

30 голосов
/ 11 ноября 2010

Я недавно начал использовать SpecFlow для тестирования BDD, но также я все еще использую модульные и интеграционные тесты.

По сути, я разбил тесты на отдельные проекты.:

  • Спецификации
  • Интеграция
  • Модуль

Мои модульные тесты предназначены для тестирования одного метода и не выполняют никаких вызовов базы данных.или внешние ссылки вообще.Я использую интеграционные тесты для одиночных вызовов методов (возможно, иногда двух), которые взаимодействуют с внешними ресурсами, такими как база данных, веб-служба и т. Д.

Я использую BDD для описания тестов, которые имитируют бизнес / доментребования проекта.Например, у меня были бы спецификации для функции создания счета-фактуры проекта;или для работы с корзиной покупок.Эти тесты следуют за

Как пользователь, я хочу, чтобы

тип семантики.

Мой совет - разделить ваши тесты на основена ваши нужды.Не пытайтесь выполнять модульное тестирование с использованием SpecFlow.

4 голосов
/ 20 октября 2015

Мы начали использовать Specflow даже для наших модульных тестов.

Основная причина (и выгода) для этого заключается в том, что мы вынуждаем вас писать тесты с точки зрения поведения, что вПоворот заставляет вас писать более независимым от реализации способом, и это в конечном итоге приводит к тому, что тесты становятся менее хрупкими и более дружественными к рефакторингу.

Конечно, это также можно сделать с помощью стандартных платформ модульного тестирования, но вы не руководствуетесьтаким же образом, как мы обнаружили, мы используем specflow и синтаксис gherkin.

Существуют некоторые накладные расходы на настройку specflow, но мы находим, что это быстро окупается, когда у вас довольно много тестов (из-зазначительный шаг повторного использования, который вы можете получить с помощью specflow) или вам нужно реорганизовать вашу реализацию.

Кроме того, вы получите отличные читаемые спецификации, которые новичкам в команде будет легко понять.

1 голос
/ 28 июля 2016

Дано:

  • Модульные тесты - это тестирование (маленьких) «единиц кода»
  • Заказчиком большинства «единиц кода» являются другиепрограммисты.
  • Одной из причин проведения модульного теста является пример того, как вызывать код.

Следовательно:

  • Ясно, что модульные тесты обычно должны быть написаны на языке программирования, который будут вызывать пользователи «единицы кода»это с.

Однако:

  • Иногда таблицы данных необходимы для настройки условий, в которых выполняется модульный тест.
  • Большинство модульных тестовфреймворки плохо умеют использовать таблицы данных.

Поэтому:

  • Specflow может быть лучшим вариантом для некоторых модульных тестов, но не долженваш выбор по умолчанию.
1 голос
/ 26 июня 2013

Я использовал specflow для тестирования BDD в двух разных приложениях хорошего размера. Как только мы проработали изломы соглашений об именовании предложений, все получилось довольно хорошо. BA, QA и даже стажеры могут написать BDD-тесты для приложения.

Однако я также использовал его для модульных тестов. Ересь! Я слышу, как некоторые из вас кричат. Однако для этого были ОЧЕНЬ веские причины. Система отвечала за выполнение многих расчетов или определений на основе множества различных данных. Благодаря большому количеству модульных тестов, требующих ввода всех этих данных для целей тестирования, значительно упрощается управление этими данными, используемыми для модульных тестов, с использованием формата таблицы, предоставляемого specflow. Эффективный макет хранилища данных в табличном формате, что позволяет энергично тестировать различные компоненты.

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

1 голос
/ 11 ноября 2010

Я рассматриваю это как интеграционное тестирование, которое означает, что оно не заменяет ваши тестовые примеры, написанные как часть вашего процесса TDD. У кого-то будет другое мнение по этому поводу. ИМХО модульный тестовый пример проверяет только методы / функции, и все зависимости должны быть проверены и введены. Когда дело доходит до интеграционного тестирования, вы будете вводить реальные зависимости вместо фиктивных. Вы можете провести такое же интеграционное тестирование с любой из структур модульного тестирования, но BDD предоставляет вам более понятный способ объяснения варианта использования интеграционного теста на языке, специфичном для предметной области, который является простым английским (или любым локализованным языком).

Та,
Rajeesh

0 голосов
/ 30 октября 2012

В конце мы пытаемся предоставить клиенту именно то, что ему нужно, и поэтому я не вижу необходимости писать модульные тесты в дополнение к SpecFlow. В конце концов, он использует ту же кодовую базу. Я довольно новичок в BDD/ATDD/TDD, но кроме того, что я "полный" и строго придерживаюсь TDD, я считаю ненужным писать больше юнит-тестов.

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

...