Pull to refresh

Инструментарий: NBehave

Reading time3 min
Views1.2K
NBehave

Библиотека для .NET, которая реализует концепцию behavior-driven development (BDD), которая по сути являеться надстройкой над test-driven development (TDD), с хорошо всем знакомым NUnit во главе.

Рано или поздно всем разработчикам приходиться писать \ менять unit тесты. Как правило, спустя месяц / год разработчик уже не помнит какой тест, что проверяет и как он это делает. Ещё хуже, если сотни тестов достаються Вам в наследство, даже понять, что именно проверяет тест не всегда просто. А если над проектом работает команда аналитиков которые хотят проверить работу логики, но при этом не знают языка программирования?

И тут на белом коне появляеться NBehave, его задача — облегчить сопровождение и поддержку unit тестов и предоставить «не программистам» возможность протестировать логику.

Смотрим пример:
[Theme]
public void Transfer_to_cash_account()
{

  Account savings = null;
  Account cash = null;

  Story transferStory = new Story("Transfer to cash account");

  transferStory
    .AsA("savings account holder")
    .IWant("to transfer money from my savings account")
    .SoThat("I can get cash easily from an ATM");

  transferStory
    .WithScenario("Savings account is in credit")

    .Given("my savings account balance is $balance", 100, accountBalance => { savings = new Account(accountBalance); })
    .And("my cash account balance is $balance", 10, accountBalance => { cash = new Account(accountBalance); })
    .When("I transfer $amount to cash account", 20, transferAmount => savings.TransferTo(cash, transferAmount))
    .Then("my savings account balance should be $balance", 80, expectedBalance => savings.Balance.ShouldEqual(expectedBalance))
      .And("my cash account balance should be $balance", 30, expectedBalance => cash.Balance.ShouldEqual(expectedBalance));

  transferStory
    .WithScenario("Savings account is overdrawn")

    .Given("my savings account balance is -20")
        .And("my cash account balance is 10")
     .When("I transfer 20 to cash account")
    .Then("my savings account balance should be -20")
        .And("my cash account balance should be 10");
}


* This source code was highlighted with Source Code Highlighter.


В результате теста мы получим следующий output:

Story: Transfer to cash account

Narrative:
  As a savings account holder
  I want to transfer money from my savings account
  So that I can get cash easily from an ATM

  Scenario 1: Savings account is in credit
    Given my savings account balance is 100
      And my cash account balance is 10
    When I transfer 20 to cash account
    Then my savings account balance should be 80
      And my cash account balance should be 30

  Scenario 2: Savings account is overdrawn
    Given my savings account balance is -20
      And my cash account balance is 10
    When I transfer 20 to cash account
    Then my savings account balance should be -20
      And my cash account balance should be 10


* This source code was highlighted with Source Code Highlighter.


Написание Story сводиться к:
  • Описанию действия
  • Декларации намерений
  • Инициализации начальных данных
  • Проверки выходных данных

Ну и о минусах библиотеки, из личного опыта:

В первый раз пришлось познакомиться с ней, когда она была ещё весьма сырой.
К синтаксису достаточно сложно привыкнуть и часто надо смотреть в примеры.
В текущей версии добавили альтернативно-упрощённый подход к написанию Story, хотя я его на практике ещё не проверял.
Добавляет работы программистам.
0.4 билд удалось запустить только с SVN репозитория, 0.3 работал с инсталяшки.
Нет нормальной документации, во всём надо разбираться самому =(
Ссылка на пример на 0.3 — grabbagoft.blogspot.com/2007/09/authoring-stories-with-nbehave-03.html
Tags:
Hubs:
+2
Comments5

Articles

Change theme settings