Можно ли использовать specflow для написания процедурных тестов, отличных от bdd?

specflow выглядит как решение, которое я хочу рассмотреть для своей команды. Мой менеджер, однако, не очень любит тесты в стиле BDD. Из-за хорошей интеграции specflow с visual studio мне интересно, смогу ли я использовать структуру specflow, допуская при этом форму тестов, менее похожую на bdd.

Например, вместо написания теста вида:

Scenario: Help->About
  Given a user is logged in to "http://..." as "user/password"
    And they are on the page titled "Home"
   When I click on "about"
   Then I should see a window titled "about"

... Я хотел бы написать это как:

Scenario: Help->About
  log in to "http://..." as "user/password"
  click on the "About" link
  assert "About" window should be visible

Другими словами, должен использовать такие ключевые слова, как Given, Then и т. д., или же specflow может обрабатывать шаги, которые не начинаются с этих слов?


person Bryan Oakley    schedule 06.08.2011    source источник


Ответы (2)


Specflow использует ключевые слова Given, When и Then в генераторе кода для создания тестового примера, подобного этому:

    [NUnit.Framework.TestAttribute()]
    [NUnit.Framework.DescriptionAttribute("See the content of a message")]
    public virtual void SeeTheContentOfAMessage()
    {
        TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Help->About", ((string[])(null)));
        this.ScenarioSetup(scenarioInfo);
        testRunner.Given("a user is logged in to \"http://\" as user/password");
        testRunner.When("I click on About"); 
        testRunner.Then("I should see a window titled about");
        testRunner.CollectScenarioErrors();
    }

Единственный способ изменить тесты так, как вы описали, - это изменить генератор кода. Метод TryParseStepKeyword() в GherkinDialect — хорошее начало.

person Filip De Vos    schedule 08.08.2011

Я думаю, многое зависит от того, как вы интерпретируете Дано, Когда и Тогда. Наилучший подход, который мы нашли, заключался в том, что данный подход должен подготавливать состояние к тесту. Когда должно быть действие, против которого вы тестируете, и Затем должна быть проверка. Когда вы думаете об этом с такого подхода, оба примера очень похожи. Лично мне нравится более общий стиль второго. Таким образом, вы не привязываете свою функцию к определенному набору шагов, а тестируете поведение. Говоря, что на самом деле не потребуется больше, чтобы ваши тесты были такими. Например.

Scenario: Help->About
Given a user is logged in
When you navigate to the the About page
Then the about information should be displayed

Я стараюсь не использовать определенные действия, такие как щелчок. В конце концов, вам решать, как сформулировать шаги, но specflow использует Given/When/Then для генерации кода. Однако вам не нужно использовать все.

person Ryan Burnham    schedule 19.08.2011