Создайте исходный файл main.go, используя простой пример babyapi
Используйте интерфейс командной строки для создания шаблона теста
Реализуйте каждый тест, заполнив заполнители ожидаемым JSON
Запустите тесты и убедитесь, что они пройдены!
Поскольку PUT является идемпотентным, он требует включения всех полей. Чтобы избежать этого, мы хотим добавить поддержку переключения запросов «Завершено с PATCH». Начнем с добавления простого теста того, как, по нашему мнению, будет выглядеть эта функция
Этот тест не пройден, поскольку babyapi по умолчанию не поддерживает PATCH. Мы можем это исправить, внедрив Patch для структуры TODO. Поскольку мы определили нашу функцию с помощью двух тестов, наша самая простая реализация — это не просто установка Completed = true, и мы должны использовать значение из запроса
Теперь мы можем изменить статус выполнения задачи TODO, но по-прежнему не можем использовать PATCH для изменения других полей, как показано в этом новом наборе тестов
Обновите патч, чтобы настроить остальные поля
Наши тесты по-прежнему терпят неудачу, поскольку мы всегда обновляем TODO с полями запроса, даже если они пусты. Исправьте это, обновив реализацию для проверки пустых значений
Новый тест UpdateWithPatch пройден, но наши предыдущие тесты завершились неудачей. Поскольку мы изменили значение Completed на *bool, TODO, созданные с пустым значением, будут отображаться как null
Реализовать рендеринг для TODO, чтобы мы могли считать ноль ложным
Внедрение функции PATCH при разработке через тестирование привело к созданию надежного набора тестов и хорошо реализованной функции. Поскольку мы начали с определения ожидаемых входных и выходных данных запроса PATCH в тестах, было легко увидеть проблемы, вызванные отсутствием проверки пустых значений в запросе. Кроме того, наши ранее существовавшие тесты могли защитить от критических изменений при изменении типа Completed на *bool.
Разработка через тестирование — это эффективный подход для создания полностью протестированного и правильного кода. Начав с тестирования, мы можем гарантировать, что каждый фрагмент кода спроектирован так, чтобы его можно было тестировать, а не оставлять тесты на второй план.
Если вы не решаетесь использовать TDD, вот несколько идей для начала:
Даже если TDD не очень подходит для того, как вы пишете код, это все равно мощный инструмент, который нужно иметь под рукой. Я советую вам хотя бы потратить некоторое время на то, чтобы опробовать его и посмотреть, как это повлияет на ваш процесс разработки.
","image":"http://www.luping.net/uploads/20240730/172232678666a89f02dc4a5.jpg","datePublished":"2024-07-30T16:06:26+08:00","dateModified":"2024-07-30T16:06:26+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}Разработка через тестирование — это эффективный метод обеспечения хорошо протестированного и поддающегося рефакторингу кода. Основная идея заключается в том, что вы начинаете разработку с написания тестов. Эти тесты четко документируют ожидания и создают критерии для успешной реализации. Если все сделано правильно, вы можете четко определить ожидаемый ввод/вывод функции перед написанием любого кода. Это имеет несколько непосредственных преимуществ:
Теперь, когда вы убедились в преимуществах, вы можете приступить к разработке через тестирование (TDD), выполнив следующие действия:
Эти шаги выполняются циклично, поэтому вы всегда добавляете больше тестов, чтобы бросить вызов текущей реализации.
Последний шаг, который требует написания минимального объема кода, может стать утомительным, если следовать ему строго. Важно понять, почему существует это правило, прежде чем вы сможете определить, когда уместно от него отступить.
Вам поручено реализовать функцию Add(x, y int) int. Прежде чем перейти к реализации и просто вернуть x y, напишите простейший тест: 1 1 == 2. Какая же самая простая реализация пройдет этот тест? Это просто возврат 2. Теперь ваши тесты пройдены!
На этом этапе вы понимаете, что вам нужно больше тестов, поэтому ускоряете темп и добавляете еще несколько:
Теперь ваши тесты терпят неудачу, поэтому вам нужно исправить реализацию. На этот раз вы не можете просто вернуть 3 или 105, поэтому вам нужно найти решение, которое будет работать для всех тестов. Это приводит к реализации: return x y.
Хотя в тривиальном примере это кажется слишком утомительным, строгое соблюдение этого метода заставило вас написать несколько тестов вместо того, чтобы просто доверять своей реализации. Конечно, ваша первоначальная идея вернуть x y сработала бы, но суть в том, чтобы переучить себя полагаться на тесты, а не на собственное понимание кода. В реальном мире вы не единственный, кто работает над этим фрагментом кода, и вы неизбежно забудете детали реализации. Этот процесс заставляет вас писать больше тестов и думать о новых способах сломать простую реализацию.
Со временем вы наберетесь опыта и научитесь находить баланс, который работает в различных сценариях, с которыми вы сталкиваетесь. Вы вернетесь к полной реализации функций и обнаружите, что у вас меньше ошибок и вы пишете больше поддерживаемого кода.
Давайте рассмотрим более сложный пример использования TDD для HTTP REST API. В этом пошаговом руководстве используется моя платформа Go, babyapi, но эти концепции можно применять где угодно.
babyapi использует дженерики для создания полноценного CRUD API на основе структур Go, что упрощает создание полноценного REST API и клиентского CLI. В дополнение к этому пакет babytest предоставляет некоторые инструменты для создания сквозных тестов таблиц API. Использование TDD на уровне API позволяет полностью протестировать уровни HTTP и хранилища нового API или функции одновременно.
Отказ от ответственности: поскольку babyapi выполняет большую часть реализации, а также используется для создания тестового шаблона, технически мы не начинаем с TDD. Однако мы увидим, насколько это полезно при добавлении поддержки запросов PATCH в наш API.
Создать новый проект Go
Создайте исходный файл main.go, используя простой пример babyapi
Используйте интерфейс командной строки для создания шаблона теста
Реализуйте каждый тест, заполнив заполнители ожидаемым JSON
Запустите тесты и убедитесь, что они пройдены!
Поскольку PUT является идемпотентным, он требует включения всех полей. Чтобы избежать этого, мы хотим добавить поддержку переключения запросов «Завершено с PATCH». Начнем с добавления простого теста того, как, по нашему мнению, будет выглядеть эта функция
Этот тест не пройден, поскольку babyapi по умолчанию не поддерживает PATCH. Мы можем это исправить, внедрив Patch для структуры TODO. Поскольку мы определили нашу функцию с помощью двух тестов, наша самая простая реализация — это не просто установка Completed = true, и мы должны использовать значение из запроса
Теперь мы можем изменить статус выполнения задачи TODO, но по-прежнему не можем использовать PATCH для изменения других полей, как показано в этом новом наборе тестов
Обновите патч, чтобы настроить остальные поля
Наши тесты по-прежнему терпят неудачу, поскольку мы всегда обновляем TODO с полями запроса, даже если они пусты. Исправьте это, обновив реализацию для проверки пустых значений
Новый тест UpdateWithPatch пройден, но наши предыдущие тесты завершились неудачей. Поскольку мы изменили значение Completed на *bool, TODO, созданные с пустым значением, будут отображаться как null
Реализовать рендеринг для TODO, чтобы мы могли считать ноль ложным
Внедрение функции PATCH при разработке через тестирование привело к созданию надежного набора тестов и хорошо реализованной функции. Поскольку мы начали с определения ожидаемых входных и выходных данных запроса PATCH в тестах, было легко увидеть проблемы, вызванные отсутствием проверки пустых значений в запросе. Кроме того, наши ранее существовавшие тесты могли защитить от критических изменений при изменении типа Completed на *bool.
Разработка через тестирование — это эффективный подход для создания полностью протестированного и правильного кода. Начав с тестирования, мы можем гарантировать, что каждый фрагмент кода спроектирован так, чтобы его можно было тестировать, а не оставлять тесты на второй план.
Если вы не решаетесь использовать TDD, вот несколько идей для начала:
Даже если TDD не очень подходит для того, как вы пишете код, это все равно мощный инструмент, который нужно иметь под рукой. Я советую вам хотя бы потратить некоторое время на то, чтобы опробовать его и посмотреть, как это повлияет на ваш процесс разработки.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3