Я задавал подобные вопросы много, хотя в последнее время.Есть много разумных вариантов, и вы можете легко создать свой собственный, как показано в некоторых ответах в этом посте.Я работал над средой тестирования BDD с целью облегчить ее распространение на любую среду модульного тестирования.В настоящее время я поддерживаю MSTest и NUnit.Его называют , учитывая , и это с открытым исходным кодом.Основная идея довольно проста, поскольку Given предоставляет оболочки для общих наборов функциональных возможностей, которые затем можно реализовать для каждого участника теста.
Ниже приведен пример теста NUnit Given:
[Story(AsA = "car manufacturer",
IWant = "a factory that makes the right cars",
SoThat = "I can make money")]
public class when_building_a_toyota : Specification
{
static CarFactory _factory;
static Car _car;
given a_car_factory = () =>
{
_factory = new CarFactory();
};
when building_a_toyota = () => _car = _factory.Make(CarType.Toyota);
[then]
public void it_should_create_a_car()
{
_car.ShouldNotBeNull();
}
[then]
public void it_should_be_the_right_type_of_car()
{
_car.Type.ShouldEqual(CarType.Toyota);
}
}
Я старался изо всех сил, чтобы оставаться верным понятиям из блога Дэна Норта «Вводящий BDD », и поэтому все делается с использованием заданного, когда и тогда стиля спецификации.То, как это реализовано, позволяет вам иметь несколько данных и даже несколько когда, и они должны выполняться по порядку (все еще проверяя это).
Кроме того, имеется полный набор расширений If, включенных непосредственно в Given.Это разрешает такие вещи, как вызов ShouldEqual()
, показанный выше, но полон хороших методов для сравнения коллекций, сравнения типов и т. Д. Для тех из вас, кто знаком с MSpec, я в основном разорвал их и сделал некоторые модификации, чтобы они работали внеMSpec.
Окупаемость, однако, я думаю, в отчетности.Бегущий по тестам заполнен созданным вами сценарием, так что сразу вы можете получить подробную информацию о том, что фактически делает каждый тест, не углубляясь в код:
Кроме того, HTML-отчетсоздан с использованием шаблонов t4 на основе результатов тестов для каждой сборки.Классы с соответствующими историями все вложены вместе, и имя каждого сценария напечатано для быстрого ознакомления.Для приведенных выше тестов отчет будет выглядеть следующим образом:
Неудачные тесты будут окрашены в красный цвет и их можно будет щелкнуть, чтобы просмотреть подробности исключения.
Вот и все.Я использую его в нескольких проектах, над которыми я работаю, поэтому он все еще активно разрабатывается, но я бы назвал ядро довольно стабильным.Я ищу способ разделять контексты по составу, а не по наследству, так что это, вероятно, будет одним из следующих изменений, которые появятся в будущем.Ввести на критику.:)