Что такое подход Given-When-Then в тестировании?

«Что такое подход Given-When-Then в тестировании?» — вопрос из категории Основы программирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Given-When-Then (GWT) — это шаблон для структурирования тестовых сценариев, особенно в Behavior-Driven Development (BDD). Он делает тесты читаемыми и связывает их с бизнес-требованиями.

  • Given (Дано) — описывает начальное состояние системы или контекст.
  • When (Когда) — описывает действие или событие, которое выполняется.
  • Then (Тогда) — описывает ожидаемый результат или изменение состояния.

Пример на Java с Cucumber:

// Файл .feature (спецификация на естественном языке)
Feature: User Login
  Scenario: Successful login with valid credentials
    Given the user is on the login page
    When the user enters valid username and password
    Then the user is redirected to the home page

// Step Definitions (реализация шагов)
public class LoginSteps {
    @Given("the user is on the login page")
    public void userIsOnLoginPage() {
        driver.get("https://app.com/login");
    }

    @When("the user enters valid username and password")
    public void userEntersCredentials() {
        page.enterCredentials("testUser", "securePass123");
        page.clickLogin();
    }

    @Then("the user is redirected to the home page")
    public void userIsOnHomePage() {
        assertTrue(homePage.isDisplayed());
        assertEquals("Welcome, testUser", homePage.getWelcomeMessage());
    }
}

Преимущества подхода:

  1. Читаемость: Сценарии понятны разработчикам, тестировщикам и бизнес-аналитикам.
  2. Структура: Четкое разделение на предусловия, действия и проверки.
  3. Документация: Файлы .feature служат живой документацией системы.
  4. Переиспользование: Шаги (Steps) можно комбинировать для создания новых сценариев.