Esboço de pepino e cenário

Esboço de pepino e cenário

1. Introdução

Pepino é uma estrutura de teste BDD (Behavioral Driven Development).

Usar a estruturato write repetitive scenarios com diferentes permutações de entradas / saídas pode consumir muito tempo, ser difícil de manter e, claro, frustrante.

A Cucumber veio com uma solução para reduzir esse esforço usando o conceito deScenario Outline coupled with Examples. Na seção abaixo, tentaremos dar um exemplo e ver como podemos minimizar esse esforço.

Se você quiser ler mais sobre a abordagem e a linguagem Gherkin, dê uma olhada emthis article.

2. Adicionando Suporte de Pepino

Para adicionar suporte ao Cucumber em um projeto Maven simples, precisaremos adicionar as seguintes dependências:


    info.cukes
    cucumber-junit
    1.2.5
    test


    info.cukes
    cucumber-java
    1.2.5
    test


    org.hamcrest
    hamcrest-library
    1.3
    test

Links úteis para dependências do Maven Central:cucumber-junit,cucumber-java,hamcrest-library

Uma vez que essas são bibliotecas de teste, elas não precisam ser enviadas com as implementáveis ​​reais - é por isso que todas têm escopotest.

3. Um exemplo simples

Vamos demonstrar uma maneira inchada e concisa de escrever arquivos em destaque. Vamos primeiro definir a lógica para a qual queremos escrever um teste:

Vamos primeiro definir a lógica para a qual queremos escrever um teste:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

4. Definindo Testes de Pepino

4.1. Definindo um arquivo de característica

Feature: Calculator
  As a user
  I want to use a calculator to add numbers
  So that I don't need to add myself

  Scenario: Add two numbers -2 & 3
    Given I have a calculator
    When I add -2 and 3
    Then the result should be 1

  Scenario: Add two numbers 10 & 15
    Given I have a calculator
    When I add 10 and 15
    Then the result should be 25

Como visto aqui, duas combinações diferentes de números foram colocadas para testar aqui a lógica de adição. Além dos números, todos os cenários são exatamente os mesmos.

4.2. Código de “cola”

Para testar esses cenários, é essencial definir cada etapa com o código correspondente, a fim de traduzir uma declaração em um pedaço funcional de código:

public class CalculatorRunSteps {

    private int total;

    private Calculator calculator;

    @Before
    private void init() {
        total = -999;
    }

    @Given("^I have a calculator$")
    public void initializeCalculator() throws Throwable {
        calculator = new Calculator();
    }

    @When("^I add (-?\\d+) and (-?\\d+)$")
    public void testAdd(int num1, int num2) throws Throwable {
        total = calculator.add(num1, num2);
    }

    @Then("^the result should be (-?\\d+)$")
    public void validateResult(int result) throws Throwable {
        Assert.assertThat(total, Matchers.equalTo(result));
    }
}

4.3. Aula de corredor

Para integrar os recursos e o código de cola, podemos usar os corredores JUnit:

@RunWith(Cucumber.class)
@CucumberOptions(
  features = { "classpath:features/calculator.feature" },
  glue = {"com.example.cucumber.calculator" })
public class CalculatorTest {}

5. Reescrevendo recursos usando contornos de cenário

Vimos na Seção 4.1. como definir um arquivo de recurso pode ser uma tarefa demorada e mais propensa a erros. O mesmo arquivo de recurso pode ser reduzido a apenas algumas linhas usando oScenario Outline:

Feature: Calculator
  As a user
  I want to use a calculator to add numbers
  So that I don't need to add myself

  Scenario Outline: Add two numbers  & 
    Given I have a calculator
    When I add  and 
    Then the result should be 

  Examples:
    | num1 | num2 | total |
    | -2 | 3 | 1 |
    | 10 | 15 | 25 |
    | 99 | -99 | 0 |
    | -1 | -10 | -11 |

Ao comparar umScenario Definition regular comScenario Outline, os valores não precisam mais ser codificados nas definições de etapas. Os valores são substituídos por parâmetros como<parameter_name> na própria definição da etapa.

No final do esboço do cenário, os valores são definidos em um formato de tabela delimitado por barras verticais usandoExamples.

Uma amostra para definirExamples é mostrada abaixo:

Examples:
  | Parameter_Name1 | Parameter_Name2 |
  | Value-1 | Value-2 |
  | Value-X | Value-Y |

6. Conclusão

Com este artigo rápido, mostramos como os cenários podem ser genéricos por natureza. E também reduza o esforço de escrever e manter esses cenários.

O código-fonte completo deste artigo pode ser encontradoover on GitHub.