提问人:Javed 提问时间:8/26/2023 最后编辑:jonrsharpeJaved 更新时间:8/26/2023 访问量:41
您将如何使用 TDD 开发用于 API 响应解析的函数?
How would you develop a function for API response parsing using TDD?
问:
我刚刚读了 Kent Beck 的《Test Driven Development: By Example》,并尝试将其应用到我当前的项目中。
给定一个 API 响应,我需要从中提取信息。API 响应是一个 JSON 数组:
[
{"1789484079": "event1", "1531059415": "event2"},
{},
{},
{"1234256612": "event3"}
]
该数组中的每个对象可以有多个键,每个键都是一个时间戳。对象可能为空。
任务是根据给定的时间戳查找最近的“事件”。例如:
- 如果给定的时间戳1889484079则返回“event1”;
- 如果给定的时间戳1689484079则“event2”是正确的选择。
因此,按照本书的指导,一个测试和一个返回常量的朴素实现:
def parse_response(response, timestamp):
return "event1"
def test_api_response_parsing_returns_correct_events():
response = [{1789484079: "event1", 1531059415: "event2"}]
timestamp = 1889484079
assert parse_response(response, timestamp) == "event1"
现在我需要让测试失败,这样我才有改进的余地。
def test_api_response_parsing_returns_correct_events():
response = [{1789484079: "event1", 1531059415: "event2"}]
timestamp = 1889484079
assert parse_response(response, timestamp) == "event1"
timestamp = 1689484079
assert parse_response(response, timestamp) == "event2"
如果我们想像肯特·贝克(Kent Beck)在他的书中建议的那样,继续小步前进,下一步会是什么?
再引入 2 个常量?
def parse_response(response, timestamp):
if timestamp == 1889484079:
return "event1"
else:
return "event2"
这开始看起来像是重复,我们必须摆脱它。我们将如何做到这一点?我对下一步的想法是,我们有时间戳,所以为了消除重复,我们必须遍历响应,同时根据函数必须遵循的规则检查时间戳,但这难道不是一个很大的飞跃,而不是一小步吗?response
如果你遵循TDD原则,你会如何开发这个功能?
答: 暂无答案
评论
response
return response[0][timestamp]
response
timestamp = 1889484079
event1
response
[{"0": "event1"}]
"event1"
[{"0": "event1", "1": "event2"}]
"event2"