Огурец 4: внедрить глобальные зацепки - PullRequest
0 голосов
/ 10 июля 2019

Я новичок в тестировании Cucumber BDD v4.1.

Вопросы:

  1. Как реализовать до (настройку) метод в Cucumber 4 (DAO, Spring)?

Пожалуйста, помогите. Благодарю.

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Cucumber Hooks - Где использовать @Before @Before, в его наиболее простом использовании, позволяет запускать блок кода перед каждым сценарием.Обычно в Cucumber мы склонны делать связанные с инициализацией вещи - такие как инициализация объекта, настройка данных и т. Д. В заданном операторе.Из-за этого многие люди не видят необходимости использовать @Before от Cucumber.Но вы можете использовать @Before для записи в отчете о том, что выполняется новый сценарий.Поскольку @Before всегда выполняется перед каждым сценарием, вы можете использовать это в своих отчетах, чтобы четко представить, когда сценарий начинает выполняться.

Нет необходимости добавлять @Before в каждый файл объектов.Просто добавьте его в любой файл функций и позвольте Cucumber выполнять свою работу.Cucumber выяснит, где вы сохранили @Before, а затем будет использовать его перед всеми сценариями.Чтобы сделать ваши отчеты более полезными и легкими для понимания, вы можете также написать имя сценария в отчете.Код Java для этого приведен ниже -

@Before
public void before(Scenario scenario) {
    System.out.println("------------------------------");
    System.out.println("Starting - " + scenario.getName());
    System.out.println("------------------------------");
}

Cucumber API предоставляет интерфейс, называемый сценарием, с помощью которого вы можете получить экземпляр этого класса.В приведенном выше коде мы только что использовали метод getName () этого интерфейса, чтобы напечатать имя сценария в нашем журнале.

Тестовые зацепки с одним сценарием (пример):

Файл функций

Feature: Test Hooks

    Scenario: This scenario is to test hooks functionality
        Given this is the first step
        When this is the second step
        Then this is the third step

Определения шагов:

package stepDefinition;

import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;

public class Hooks_Steps {

 @Given("^this is the first step$")
 public void This_Is_The_First_Step(){
 System.out.println("This is the first step");
 }

 @When("^this is the second step$")
 public void This_Is_The_Second_Step(){
 System.out.println("This is the second step");
 }

 @Then("^this is the third step$")
 public void This_Is_The_Third_Step(){
 System.out.println("This is the third step");
 }

}

Крючки

package utilities;
import cucumber.api.java.After;
import cucumber.api.java.Before;

public class Hooks {

    @Before
    public void beforeScenario(){
        System.out.println("This will run before the Scenario");
    }   

    @After
    public void afterScenario(){
        System.out.println("This will run after the Scenario");
    }
}

РЕДАКТИРОВАНИЕ:

Обходной путь, упомянутый в Проблема №515 и в других местах заключается в использовании аннотаций @BeforeClass и @AfterClass JUnit в классе бегуна, например:

@RunWith(Cucumber.class)
@Cucumber.Options(format = {
    "html:target/cucumber-html-report",
    "json-pretty:target/cucumber-json-report.json"})
public class HooksTest {

    @BeforeClass
    public static void setup() {
        System.out.println("Ran the before");
    }

    @AfterClass
    public static void teardown() {
        System.out.println("Ran the after");
    }
}

Примечание. Хотя @BeforeClass и @AfterClass могут выглядеть следующим образомсамое чистое решение на первый взгляд, они не очень практичны в использовании.Они работают только тогда, когда Cucumber-JVM настроен на использование JUnit runner .Другие бегуны, такие как TestNG, бегун командной строки и специальные бегуны IDE, не поймут эти хуки.Их методы также должны быть статическими и, в любом случае, для обмена данными потребуются статические переменные или одиночные символы.

для запуска тестовых случаев JUnit из командной строки

0 голосов
/ 11 июля 2019

Я уже получил ответы, которые реализует ConcurrentEventListener.

...