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.