Python 3.1 的 TDD
我是一名使用测试驱动开发(TDD)的C++程序员。现在我在学习Python 3,并希望继续使用TDD。目前在C++中,我给我的所有类都定义了一个接口,并创建了这些接口的模拟版本。然后我在代码中传递这些接口的指针。
我想知道在Python中有效地进行TDD应该使用哪些库。Python自带了哪些工具,另外还需要哪些额外的东西。我发现了这个链接,看起来很有趣:
http://www.voidspace.org.uk/python/mock/
还有其他值得研究的替代方案吗?
有没有值得查看的在线资源、在线教程或书籍?
谢谢!
3 个回答
最近我在关注一些东西,nose[1] 自称是一个 Python 的测试驱动开发框架,而 mock、mox 以及其他一些 Python 的模拟库似乎都不太适合我的思路。我其实不太确定是否真的需要这些模拟工具。正如之前提到的,Python 的鸭子类型非常灵活,只要创建一个基础类,让它返回你想要的值就行了。但同时,你会有很多的占位符。这款模拟库 mocker[1] 在我看来是最合理的选择,但说实话我还是没有使用它。
根据我最近的经验,unittest(Python 标准库的一部分)和占位符似乎比较合适。我只是设计一个接口,让每个方法都抛出 NotImplementedError,然后在我的测试接口(模拟对象)中扩展这个接口,返回预期或意外的结果,并将这个接口扩展到我想要实现的类上。我对这个解决方案也不是特别满意,我觉得使用一个补丁装饰器可能会更好。在 Python 中,接口通常被称为 MixIn 类。
[1] http://somethingaboutorange.com/mrl/projects/nose/1.0.0/ [2] http://labix.org/mocker
mock库是一个很常用的工具,用来模拟一些东西(当然,还有很多其他的模拟库,不过有时候你根本不需要模拟)。另外,使用一些测试运行器也是很常见的,比如nose、pytest、zope.testrunner或者Distribute里面的那个。