我是不是唯一一个看不到测试驱动开发原则好处的人?

2024-06-13 11:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

几个月来,我一直在努力学习Python中的TDD,因为我听过许多比我更有天赋和技能的程序员称赞它的优点。我肯定在测试中看到了好处,我一点也不争辩。我遇到的困难是TDD的基本工作流程(据我所知):

  1. 想想你需要写的下一段代码。你知道吗
  2. 对于这段代码,编写一个测试,使这段代码应该达到的目标失败。你知道吗
  3. 运行您正在测试的程序,断言它在预期的地方失败。你知道吗
  4. 写一段你认为能使3中的测试成功的代码,然后重复直到成功。你知道吗
  5. 重复!你知道吗

我很难进入这个流程的最大原因是它占用的时间。我解释它的方式是,对于每一行可能花了我30秒来单独编写的代码,至少需要一分钟。考虑以下示例:

import requests
r = requests.get('http://stackoverflow.com/')
print(r.status_code)
>>> 200

当然不是一个有用的代码块,但是它完成了一个任务并检查了完成的状态。我用“非TDD”的方式写了30秒。以TDD风格编写的等价测试至少需要两倍的时间,因为在脚本之间切换,编写失败的测试,断言测试确实失败,然后编写get方法的使用等等

那么,我的第二个问题是:测试有什么用?如果我断言status_code是200,我不是真的在测试requests模块中编写的逻辑吗?根据我测试的逻辑条件,我从那些我绝对知道会失败,或者绝对知道会成功的测试中学到了什么?你知道吗

我的思维过程有一个可能的问题,那就是我根本没有学到足够的TDD,也就是说,一开始让你养成明智地写测试的习惯可能会很痛苦,但最终它会变成第二天性。即使是这样,无缝地编写测试仍然需要时间,而且随着应用程序复杂性的增加,时间也会增加。你知道吗

我敢肯定,我一定是错的,因为我读了这么多的人谁是“在”的水平,我想达到某一天说这样的好东西TDD。那么,我的想法哪里出错了?!你知道吗


Tags: 代码get技能status方式时间code断言
1条回答
网友
1楼 · 发布于 2024-06-13 11:28:50

编写测试更像是一种思考需求以及如何实现这些需求的方法。在我看来,也许你需要使用一些TDD框架。我认为您感到难以进行TDD的原因之一是Python没有重要的TDD框架(尽管人们说:生命短暂,所以我使用Python)。如果您使用Ruby和Rspec,您会发现TDD没有那么难。你知道吗

通过使用一些框架,您可以轻松地设计您的测试逻辑,对于您今天编写的许多步骤,您可以在将来的测试用例中简单地重用它们。你知道吗

希望这能帮助您:

Is there a python equivalent for RSpec to do TDD?

此外,如果你想探索更多的TDD世界,你可以尝试与BDD。如果您对使用BDD感兴趣,我建议您使用Python-Behave。你知道吗

http://pythonhosted.org/behave/

举个简单的例子,假设你想测试请求库

你可以像这样写你的测试用例

When I try to request "https://stackoverflow.com/"
Then I could get response code is "200"

在BDD中,您可以定义如下步骤

@when('I try to request "{my_url}"')
def step_impl(context, my_url):
    context.last_result = requests.get(my_url)

@then('I could get response code is "{code}"')
def step_impl(context, code):
    context.last_result.status_code.should.be.eq(code)

一旦你到达这里,你可以简单地用你的步骤作为明天

When I try to request "fake_url"
Then I could get response code is "404"

When I try to request "url_needs_autho"
Then I could get response code is "401"

现在可以测试库或函数的任何行为。人生苦短,所以我用Python

相关问题 更多 >