Разработка через тестирование (Тестирование Driven Разработка (сокращенно TDD) — это практика, которая стимулирует разработку путем написания тестов. Хотя многие разработчики заинтересованы в TDD Я понимаю теорию, но в реальных проектах, особенно в условиях экстренного цикла разработки, часто бывает сложно придерживаться этой модели разработки. В этой статье мы подробно обсудим на конкретных примерах. Процесс подачи заявки на TDD, показывающее, как начать с написания тестов, чтобы реализовать. Весь процесс разработки функцийиз. Через презентации кейсов и обсуждения Преимущества ТДД бросает вызов и предоставляет работоспособный изпример коди с картинками.
По мере увеличения сложности программных проектов обеспечение качества кода становится все более важным. TDD предоставляет возможность строго гарантировать, что функциональность работает должным образом, начиная с тестирования. Однако, хотя TDD в теории обладает чрезвычайно высокой эффективностью разработки и низким уровнем ошибок, многие разработчики по-прежнему чувствуют себя неспособными приступить к практике, особенно когда время поджимает, и они часто отказываются от процесса разработки через тестирование. Цель этой статьи — предоставить читателям этапы применения и конкретные примеры TDD в реальных проектах, чтобы помочь разработчикам понять и применить на практике этот метод.
TDD — это модель разработки, в которой написание тестов ставится перед разработкой функций. Его основная философия:
Ключом к TDD является непрерывное выполнение итерационного цикла «красный-зеленый свет-рефакторинг».
Предположим, мы разрабатываем простое приложение-калькулятор с целью реализации функций сложения. Согласно концепции TDD, нам сначала нужно написать тест, проверяющий правильность функции сложения.
тестовый код:
# test_calculator.py
import unittest
from calculator import Calculator
class TestCalculator(unittest.TestCase):
def test_add(self):
calc = Calculator()
result = calc.add(2, 3)
self.assertEqual(result, 5)
if __name__ == '__main__':
unittest.main()
Этот тестовый код описывает Calculator
сорт add
Метод принимает два параметра и возвращает их сумму. На данный момент мы еще не достигли Calculator
class, поэтому этот тест не пройден.
Далее пишем Реализацию кода, чтобы тест прошел. Наша цель — сначала выполнить самую базовую функцию — реализовать сложение.
функциональный код:
# calculator.py
class Calculator:
def add(self, a, b):
return a + b
Написав эту минимальную реализацию, мы добились успешного прохождения теста.
После прохождения теста,Далее мы можем рассмотреть Рефакторинг кода., например, улучшая читаемость кода или оптимизируя логику. Однако в этом случае реализация сложения уже проще, чем для, и никакой реконструкции пока не требуется. вместе По мере увеличения функциональности может возникнуть больше возможностей для рефакторинга.
Написав тесты до реализации функциональности, вы можете гарантировать, что каждая функция проверена. Такой подход «сначала тестирование» позволяет избежать риска пропуска тестовых примеров в процессе разработки и снижает вероятность ошибок в коде.
TDD заставляет разработчиков думать о требованиях и дизайне перед написанием функционального кода, тем самым помогая реализовать такие принципы, как модульность кода и разделение задач.
вместе Проект повторяется, и тестовое покрытие увеличивается, чтобы каждый модуль в проекте мог пройти Автоматизированное тестирование Проверять,уменьшать Проблемы, пропущенные во время регрессионного тестированияизриск。
Столкнувшись со срочным циклом разработки, многие разработчики предпочитают сначала быстро реализовать функции, а затем добавлять тестовый код. Однако такой подход может привести к низкому покрытию тестовых примеров и пропуску некоторых важных тестовых точек.
По мере увеличения размера проекта растет и стоимость поддержки тестовых примеров. Особенно когда бизнес-требования часто меняются, многие тестовые примеры могут стать недействительными и их необходимо будет постоянно обновлять.
TDD требует от разработчиков определенных навыков написания тестовых примеров. Эффективное написание тестов является большой проблемой, особенно в сложных сценариях.
Ниже приведен полный пример, который можно запустить из кода, этот абзац кода представляет собой типичный пример модульного теста с использованием Разработка через тестирование (TDD) Пишите код в соответствии с принципами. Он содержит два файла:
calculator.py
:осознал Calculator
добрый,Содержит базовыеиз Четыре арифметических операции(добавлять、уменьшать、брать、удалять).test_calculator.py
:использовать unittest
Модуль написан для Calculator
сортировать модульное тестирование.Мы представим эти два файла один за другим.
В файле определяется класс Calculator, который содержит четыре основных метода математических операций. Функция каждого метода очень проста, но воплощает основные идеи объектно-ориентированного программирования.
# calculator.py
class Calculator:
def add(self, a, b):
return a + b
def subtract(self, a, b):
return a - b
def multiply(self, a, b):
return a * b
def divide(self, a, b):
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
add(self, a, b)
:принимает два параметра a
и b
,ивозвращатьсяониизи。undefinedПример:add(2, 3)
возвращаться 5
。subtract(self, a, b)
:принимает два параметра a
и b
,ивозвращатьсяонииз Разница(a - b
)。undefinedПример:subtract(10, 5)
возвращаться 5
。multiply(self, a, b)
:принимает два параметра a
и b
,ивозвращатьсяониизбратьпродукт(a * b
)。undefinedПример:multiply(3, 5)
возвращаться 15
。divide(self, a, b)
:принимает два параметра a
и b
,возвращатьсяониизбизнес(a / b
)。 b
для 0
,Этот метод выкинет ValueError
аномальный,Подсказка не может делить на ноль。undefinedПример:divide(10, 2)
возвращаться 5
。undefinedесли b == 0
,броситаномальный:ValueError: Cannot divide by zero
。Этот файл использует Python из unittest
модуль для написания Calculator
сортировать модульное тестирование. Каждый тестовый пример нацелен Calculator
различные методы проверки правильности их функций.
import unittest
from calculator import Calculator
unittest
:Это Python Платформа модульного тестирования в стандартной библиотеке. Обеспечивает Автоматизированное тестирование、Функция подтверждения、Настройте среду тестирования и другие функции.from calculator import Calculator
:от calculator.py
импортировать в файл Calculator
добрый.# test_calculator.py
import unittest
from calculator import Calculator
class TestCalculator(unittest.TestCase):
def setUp(self):
self.calc = Calculator()
def test_add(self):
result = self.calc.add(2, 3)
self.assertEqual(result, 5)
def test_subtract(self):
result = self.calc.subtract(10, 5)
self.assertEqual(result, 5)
def test_multiply(self):
result = self.calc.multiply(3, 5)
self.assertEqual(result, 15)
def test_divide(self):
result = self.calc.divide(10, 2)
self.assertEqual(result, 5)
def test_divide_by_zero(self):
with self.assertRaises(ValueError):
self.calc.divide(10, 0)
if __name__ == '__main__':
unittest.main()
unittest.main()
:Этофункция входа,Он автоматически запустит все test_
Начните с методов тестирования и сообщите о результатах испытаний.Вопрос 1. Приносит ли TDD дополнительные затраты времени?
A1: Хотя TDD На ранних стадиях разработки могут возникнуть определенные временные затраты, но заранее написав тестовые примеры, вы сможете эффективно избежать последующих затрат на ремонт. Когда код был изменен, уже было из Автоматизированное тестирование может быстро проверить, возникают ли проблемы регрессии, что в конечном итоге может сэкономить много времени на отладку.
Вопрос 2. Подходит ли TDD для всех проектов?
A2: TDD Он больше подходит для проектов с понятной бизнес-логикой и четкими требованиями. Для исследовательских проектов или проектов с часто меняющимися требованиями преимущества ТДД может быть сложно воплотить в полной мере, и разработчикам необходимо использовать его гибко в соответствии с реальными условиями.
Вопрос 3. Как улучшить свои навыки написания тестовых примеров?
A3: Разработчики могут сделать это, участвуя в проектах с открытым исходным кодом и читая отличный итестовый код, чтобы улучшить свои навыки написания тестов. Кроме того, регулярные проверки также являются важным способом обнаружения и улучшения тестовых примеров.
TDD для разработчиков обеспечивают стандартизированный и автоматизированный процесс разработки. По «Написание тестов — Реализовать» функцию—Рефакторинг «кода», способного обеспечить высокое качество и надежность кодирования. TDD Существуют некоторые проблемы в практических приложениях, особенно когда они сталкиваются с давлением цикла разработки, но благодаря разумному планированию времени и использованию инструментов TDD Это может значительно повысить эффективность и качество разработки проектов.
вместе с TDD из популярен в разработке программного обеспечения, и все больше инструментов и фреймворков будут продолжать оптимизироваться. TDD Такие процессы, как умнее из IDE Интегрированное, более мощное из Автоматизированное обучающая платформа и так далее. Благодаря постоянному обучению и практике разработчики смогут лучше применять его в реальных проектах. TDD гарантирует, что проекты могут выполняться быстро, сохраняя при этом высокое качество.