你是不是也这样?
写完代码才想起来要测试?
改一个Bug,冒出三个新Bug?
上线前夜,心跳加速手心冒汗?
别慌,这几乎是每个程序员的“成长痛”。但有一种方法,能让你从此告别这种提心吊胆的日子。
TDD是啥?先写测试再写代码!
核心就三步:红 -> 绿 -> 重构。
- 重构:优化代码,保持测试依然通过(Refactor)。
# 比如,我们要写个加法函数
deftest_add():
assert add(2, 3) == 5
看,函数add都还没定义呢,测试肯定挂掉(红)。这正是我们想要的第一步!
动手!从一个简单需求开始
假设老板要你做个“购物车总价”功能。
别急着写逻辑,先写下你的期望:
import pytest
deftest_empty_cart_total():
cart = ShoppingCart()
assert cart.get_total() == 0.0
deftest_cart_with_items():
cart = ShoppingCart()
cart.add_item("apple", 1.0)
cart.add_item("banana", 2.0)
assert cart.get_total() == 3.0
现在运行pytest,不出意外,满屏红色报错。完美!我们的目标明确了。
让测试变绿,Just Make It Work!
别想太多,先让测试通过就行。
管它代码多丑,先跑通再说。
classShoppingCart:
def__init__(self):
self.items = []
defadd_item(self, name, price):
self.items.append((name, price))
defget_total(self):
# 最糙的实现
total = 0.0
for item in self.items:
total += item[1]
return total
再次运行测试,绿了!🎉 虽然代码很原始,但它确实满足了当前所有需求。
重构!让代码优雅起来
现在,我们可以放心地优化了。
因为有测试兜底,任何破坏性改动都会立刻被发现。
# 重构后的get_total,用生成器表达式更Pythonic
defget_total(self):
return sum(price for _, price in self.items)
跑一遍测试,还是绿的。爽!代码既简洁又安全。
TDD的魔力在哪?
它强迫你先思考“怎么用”,而不是“怎么写”。
这会让你的API设计更合理,代码耦合度更低。
微软研究显示,TDD能降低40%-90%的缺陷密度。
这不是玄学,是实打实的工程效率提升。你的代码,从此有了“防弹衣”。
别怕麻烦,长远看超值!
初期可能会觉得慢,写两份代码?
但想想那些深夜排查的诡异Bug,那些不敢动的“祖传代码”。
TDD前期投入的每一分钟,都在为未来节省一小时。
稳,才是这个时代最快的捷径。