Fondo de pepino

1. Información general

En este breve tutorial, aprenderemos sobre los fondos de pepino, que es una función que nos permite ejecutar algunas frases para cada prueba de una función de pepino.

2. Fondo de pepino

Primero, expliquemos qué es el trasfondo del pepino. Su propósito es ejecutar una o más frases antes de cada prueba de una característica.

Pero, ¿qué problema estamos tratando de resolver aquí?

Digamos que tenemos una aplicación de librería que queremos probar con Cucumber. En primer lugar, creemos esa aplicación, que será simplemente una clase Java:

public class BookStore { private List books = new ArrayList(); public void addBook(Book book) { books.add(book); } public List booksByAuthor(String author) { return books.stream() .filter(book -> Objects.equals(author, book.getAuthor())) .collect(Collectors.toList()); } public Optional bookByTitle(String title) { return books.stream() .filter(book -> book.getTitle().equals(title)) .findFirst(); } }

Como podemos ver, es posible agregar y buscar libros en la tienda. Ahora, creemos algunas oraciones de Pepino para interactuar con la librería:

public class BookStoreRunSteps { private BookStore store; private List foundBooks; private Book foundBook; @Before public void setUp() { store = new BookStore(); foundBooks = new ArrayList(); } @Given("^I have the following books in the store$") public void haveBooksInTheStore(DataTable table) { List
    
      rows = table.asLists(String.class); for (List columns: rows) { store.addBook(new Book(columns.get(0), columns.get(1))); } } @When("^I search for books by author (.+)$") public void searchForBooksByAuthor(String author) { foundBooks = store.booksByAuthor(author); } @When("^I search for a book titled (.+)$") public void searchForBookByTitle(String title) { foundBook = store.bookByTitle(title).orElse(null); } @Then("^I find (\\d+) books$") public void findBooks(int count) { assertEquals(count, foundBooks.size()); } @Then("^I find a book$") public void findABook() { assertNotNull(foundBook); } @Then("^I find no book$") public void findNoBook() { assertNull(foundBook); } }
    

Con esas frases podemos añadir libros, buscarlos por autor o título y comprobar si los encontramos o no.

Ahora, todo está listo para que creemos nuestra función. Buscaremos libros por su autor, pero también por su título:

Feature: Book Store Without Background Scenario: Find books by author Given I have the following books in the store | The Devil in the White City | Erik Larson | | The Lion, the Witch and the Wardrobe | C.S. Lewis | | In the Garden of Beasts | Erik Larson | When I search for books by author Erik Larson Then I find 2 books Scenario: Find books by author, but isn't there Given I have the following books in the store | The Devil in the White City | Erik Larson | | The Lion, the Witch and the Wardrobe | C.S. Lewis | | In the Garden of Beasts | Erik Larson | When I search for books by author Marcel Proust Then I find 0 books Scenario: Find book by title Given I have the following books in the store | The Devil in the White City | Erik Larson | | The Lion, the Witch and the Wardrobe | C.S. Lewis | | In the Garden of Beasts | Erik Larson | When I search for a book titled The Lion, the Witch and the Wardrobe Then I find a book Scenario: Find book by title, but isn't there Given I have the following books in the store | The Devil in the White City | Erik Larson | | The Lion, the Witch and the Wardrobe | C.S. Lewis | | In the Garden of Beasts | Erik Larson | When I search for a book titled Swann's Way Then I find no book

Esta característica funciona bien, pero tiende a ser un poco detallada porque inicializamos la tienda para cada prueba . Esto no solo crea muchas líneas, sino que si tenemos que actualizar la tienda, tenemos que hacerlo para cada prueba. Ahí es cuando los fondos de pepino son útiles.

3. Ejemplo

Entonces, ¿cómo crear un fondo creando la tienda para esta función? Para hacer esto, debemos usar la palabra clave Background , darle un título como lo hacemos para un Escenario y definir las sentencias a ejecutar:

Background: The Book Store Given I have the following books in the store | The Devil in the White City | Erik Larson | | The Lion, the Witch and the Wardrobe | C.S. Lewis | | In the Garden of Beasts | Erik Larson |

Cuando hayamos hecho esto, podemos deshacernos de esta oración en las pruebas, dejándoles enfocarse en sus especificidades:

Scenario: Find books by author When I search for books by author Erik Larson Then I find 2 books Scenario: Find books by author, but isn't there When I search for books by author Marcel Proust Then I find 0 books Scenario: Find book by title When I search for a book titled The Lion, the Witch and the Wardrobe Then I find a book Scenario: Find book by title, but isn't there When I search for a book titled Swann's Way Then I find no book

Como podemos ver, los escenarios son mucho más cortos que antes y las oraciones restantes se enfocan en lo que estamos tratando de probar en lugar de configurar los datos.

4. Diferencia con @Before

Ahora, analicemos la diferencia entre un fondo de pepino y el gancho @Before . El gancho también nos permite ejecutar código antes de un escenario, pero este código está oculto para aquellos que solo están leyendo los archivos de características . Por otro lado, un Fondo está formado por oraciones que son visibles en los archivos de características.

5. Conclusión

En este breve artículo, aprendimos cómo usar la función Fondo de pepino. Nos permite ejecutar unas frases antes de cada escenario de una característica. También discutimos la diferencia entre esta función y el gancho @Before .

Como de costumbre, el código de este artículo se puede encontrar en GitHub.