Краставица фон

1. Общ преглед

В този кратък урок ще научим за фона на краставиците, което е функция, която ни позволява да изпълняваме някои изречения за всеки тест на характеристика на краставица.

2. Краставица фон

Първо, нека да обясним какво представлява краставицата. Целта му е да изпълни едно или повече изречения преди всеки тест на дадена характеристика.

Но какъв проблем се опитваме да решим тук?

Да приемем, че имаме приложение за книжарница, което искаме да тестваме с Краставица. Първо, нека създадем това приложение, което просто ще бъде 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(); } }

Както виждаме, възможно е да добавяте и търсите книги в магазина. Сега, нека създадем няколко изречения с краставици, за да взаимодействаме с книжарницата:

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

С тези изречения можем да добавяме книги, да ги търсим по автор или заглавие и да проверяваме дали ги намираме или не.

Сега всичко е настроено за нас, за да създадем нашата функция. Ще търсим книги по техния автор, но и по заглавието им:

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

Тази функция работи добре, но има тенденция да бъде малко подробна, тъй като инициализираме хранилището за всеки тест . Това не само създава много редове, но ако трябва да актуализираме магазина, трябва да го направим за всеки тест. Тогава фоновете на краставици са полезни.

3. Пример

И така, как да създадете фон, създаващ магазина за тази функция? За да направим това, трябва да използваме ключовата дума Background , да й дадем заглавие, както правим за сценарий , и да дефинираме изреченията, които да се изпълнят:

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 |

Когато направим това, можем да се отървем от това изречение в тестовете, като им позволим да се съсредоточат върху техните специфики:

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

Както виждаме, сценариите са много по - кратки от преди и останалите изречения се фокусират върху това, което се опитваме да тестваме, вместо да настройваме данните.

4. Разлика с @Before

Сега, нека да обсъдим разликата между Краставичен фон и куката @Before . Куката също така ни позволява да изпълняваме код преди сценарий, но този код е скрит от тези, които четат само файловете с функции . От друга страна, фонът се състои от изречения, които се виждат във файловете с функции.

5. Заключение

В тази кратка статия научихме как да използваме функцията „Фон за краставици“. Позволява ни да изпълним някои изречения преди всеки сценарий на функция. Също така обсъдихме разликата между тази функция и куката @Before .

Както обикновено, кодът за тази статия може да бъде намерен в GitHub.