Рубрики
Без рубрики

Как Использовать TDD Для Чайников

Что такое Разработка тест-драйва? 👀 Это процесс, позволяющий тестам руководить нашими… Помечено как веб-разработчик, учебник, java, javascript.

Что такое Разработка тест-драйва? 👀

  • Это процесс, позволяющий тестам руководить нашей разработкой.
  • Напишите неудачный тест, а затем напишите производственный код, который позволит ему пройти.

Как назвать Тест? 🧠

  • Мне нравится следовать формату Given_When_Then.
  • Мы указываем три вещи – Условия, предопределенные для теста ( Задано ) – Действие, которое будет проверено ( Когда ) – Результат, которого мы ждем ( Тогда )

Правила TDD ⚖️

По словам дяди Боба, у ТОДДА есть три правила

Вам не разрешается:

  1. Напишите любой производственный код, если только он не предназначен для неудачного прохождения теста.
  2. Напишите больше производственного кода, чем достаточно для прохождения единственного неудачного теста.
  3. Напишите больше кода модульного теста, чем этого достаточно для сбоя.
    • Сбои компиляции считаются сбоями.

Исповедь 🤭

  • Я не следую этим правилам в 100% случаев.
  • Иногда я пишу больше производственного кода, чем того, что позволяет пройти тест, иногда я пишу код без тестов.
  • Я думаю, такова человеческая природа, мы не можем все время следовать правилам.

Пример кода Для калькулятора 🧮

Давайте посмотрим на требования

  • Метод может принимать 0, 1 или 2 числа в виде строки и возвращать их сумму (для пустой строки он вернет 0)

👉 Прежде всего, давайте напишем код для обработки регистра пустой строки

    @Test
    public void givenEmptyString_Return0(){
        CalculatorService calculatorService = new CalculatorService();
        int result = calculatorService.getSum("");
        assertEquals(0, result);
    }

Когда вы напишете этот код, он выдаст вам ошибку компиляции потому что Сервис калькулятора и его getSum метода не существует. Итак, мы создаем сервис и его метод и пишем простую логику для возврата 0 в пустых строках

public class CalculatorService {
    public int getSum(String s) {
        if (s.isEmpty())
            return 0;
        else
            return 1;
    }
}

Обратите внимание, что 1 в операторе else является произвольным значением, используемым, чтобы избежать ошибки компилятора, так как мы должны возвращать значение из метода.

👉 Теперь давайте напишем тест для обработки строк с 1 номером

    @Test
    public void givenAStringWith1Number_ReturnIt_WhenCalculateSum(){
        CalculatorService calculatorService = new CalculatorService();
        int result = calculatorService.getSum("5");
        assertEquals(5, result);
    }

Когда мы впервые запустим этот тест, он завершится неудачей, так как возвращаемое значение равно 1. Так что давайте сделаем так, чтобы это сработало

    public int getSum(String s) {
        if (s.isEmpty())
            return 0;
        else if (s.length() == 1)
            return Integer.parseInt(s);
        else
            return 1;
    }

👉 Далее давайте напишем тест для обработки строк с 2 числами

    @Test
    public void givenAStringWith2Numbers_WhenCalculateSum_ThenReturnSum(){
        CalculatorService calculatorService = new CalculatorService();
        int result = calculatorService.getSum("69");
        assertEquals(15, result);
    }

Этот тест провалится, потому что 1 не равно 15. да! Давайте сделаем так, чтобы это сработало

    public int getSum(String s) {
        if (s.isEmpty())
            return 0;
        else if (s.length() == 1)
            return Integer.parseInt(s);
        else
            return getSumForMultipleNumbers(s);
    }

    private int getSumForMultipleNumbers(String s) {
        return Arrays.
                stream(s.split("")).
                mapToInt(Integer::parseInt).
                sum();
    }

Праздник 🥳

Мы только что применили TDD для программирования действительно простого калькулятора.

Дальнейшие Чтения 👨 🏫

✅ Как Выполнить Модульный Тест , Например профессионал

≈ 5 TDD Самые распространенные Ошибки

Код На GitHub 👩 💻

Оригинал: “https://dev.to/jarjanazy/how-to-tdd-for-dummies-419k”