Latar Belakang Timun

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan mempelajari Latar Belakang Timun, yang merupakan ciri yang membolehkan kita melaksanakan beberapa ayat untuk setiap ujian Cucumber Feature.

2. Latar Belakang Timun

Pertama, mari kita jelaskan apa itu Latar Belakang Timun. Tujuannya adalah untuk melaksanakan satu atau lebih ayat sebelum setiap ujian ciri.

Tetapi masalah apa yang cuba kita selesaikan di sini?

Katakanlah kita mempunyai aplikasi kedai buku yang ingin kita uji dengan Timun. Pertama sekali, mari buat aplikasi itu, yang akan menjadi kelas 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(); } }

Seperti yang kita lihat, ada kemungkinan untuk menambah dan mencari buku di kedai. Sekarang, mari buat beberapa ayat Timun untuk berinteraksi dengan kedai buku:

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); } }
    

Dengan ayat-ayat itu, kita dapat menambahkan buku, mencarinya mengikut pengarang atau tajuk, dan memeriksa sama ada kita dapati atau tidak.

Sekarang, semuanya sudah siap untuk membuat ciri kami. Kami akan mencari buku oleh pengarangnya, tetapi juga berdasarkan tajuknya:

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

Ciri ini berfungsi dengan baik, tetapi cenderung sedikit verbose kerana kami memulakan kedai untuk setiap ujian . Ini bukan sahaja menghasilkan banyak baris, tetapi jika kita perlu mengemas kini kedai, kita harus melakukannya untuk setiap ujian. Ketika itulah Latar Belakang Timun menjadi berguna.

3. Contoh

Jadi, bagaimana membuat latar belakang membuat kedai untuk ciri ini? Untuk melakukan ini, kita mesti menggunakan kata kunci Latar Belakang , memberikan judul seperti yang kita lakukan untuk Skenario , dan menentukan ayat yang akan dilaksanakan:

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 |

Apabila kami melakukan ini, kami dapat menyingkirkan ayat ini dalam ujian, membiarkan mereka fokus pada kekhususan mereka:

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

Seperti yang dapat kita lihat, senario jauh lebih pendek daripada sebelumnya dan ayat-ayat yang tersisa menumpukan pada apa yang ingin kita uji daripada menyiapkan data.

4. Perbezaan dengan @Sebelumnya

Sekarang, mari kita bincangkan perbezaan antara Latar Timun dan cangkuk @Sebelum ini . Cangkuk juga membolehkan kita melaksanakan kod sebelum senario, tetapi kod ini tersembunyi dari mereka yang hanya membaca fail ciri . Sebaliknya, Latar Belakang dibuat dari ayat yang dapat dilihat dalam fail ciri.

5. Kesimpulan

Dalam artikel pendek ini, kami belajar bagaimana menggunakan ciri Latar Belakang Timun. Ini membolehkan kita melaksanakan beberapa ayat sebelum setiap senario ciri. Kami juga membincangkan perbezaan antara ciri ini dan cantuman @Sebelum ini .

Seperti biasa, kod untuk artikel ini boleh didapati di GitHub.