几个月来,我一直在努力学习Python中的TDD,因为我听过许多比我更有天赋和技能的程序员称赞它的优点。我肯定在测试中看到了好处,我一点也不争辩。我遇到的困难是TDD的基本工作流程(据我所知):
我很难进入这个流程的最大原因是它占用的时间。我解释它的方式是,对于每一行可能花了我30秒来单独编写的代码,至少需要一分钟。考虑以下示例:
import requests
r = requests.get('http://stackoverflow.com/')
print(r.status_code)
>>> 200
当然不是一个有用的代码块,但是它完成了一个任务并检查了完成的状态。我用“非TDD”的方式写了30秒。以TDD风格编写的等价测试至少需要两倍的时间,因为在脚本之间切换,编写失败的测试,断言测试确实失败,然后编写get方法的使用等等
那么,我的第二个问题是:测试有什么用?如果我断言status_code
是200,我不是真的在测试requests
模块中编写的逻辑吗?根据我测试的逻辑条件,我从那些我绝对知道会失败,或者绝对知道会成功的测试中学到了什么?你知道吗
我的思维过程有一个可能的问题,那就是我根本没有学到足够的TDD,也就是说,一开始让你养成明智地写测试的习惯可能会很痛苦,但最终它会变成第二天性。即使是这样,无缝地编写测试仍然需要时间,而且随着应用程序复杂性的增加,时间也会增加。你知道吗
我敢肯定,我一定是错的,因为我读了这么多的人谁是“在”的水平,我想达到某一天说这样的好东西TDD。那么,我的想法哪里出错了?!你知道吗
编写测试更像是一种思考需求以及如何实现这些需求的方法。在我看来,也许你需要使用一些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/
举个简单的例子,假设你想测试请求库
你可以像这样写你的测试用例
在BDD中,您可以定义如下步骤
一旦你到达这里,你可以简单地用你的步骤作为明天
现在可以测试库或函数的任何行为。人生苦短,所以我用Python
相关问题 更多 >
编程相关推荐