Python 3.1 的 TDD

2 投票
3 回答
1469 浏览
提问于 2025-04-16 13:43

我是一名使用测试驱动开发(TDD)的C++程序员。现在我在学习Python 3,并希望继续使用TDD。目前在C++中,我给我的所有类都定义了一个接口,并创建了这些接口的模拟版本。然后我在代码中传递这些接口的指针。

我想知道在Python中有效地进行TDD应该使用哪些库。Python自带了哪些工具,另外还需要哪些额外的东西。我发现了这个链接,看起来很有趣:

http://www.voidspace.org.uk/python/mock/

还有其他值得研究的替代方案吗?

有没有值得查看的在线资源、在线教程或书籍?

谢谢!

3 个回答

0

最近我在关注一些东西,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

1

mock库是一个很常用的工具,用来模拟一些东西(当然,还有很多其他的模拟库,不过有时候你根本不需要模拟)。另外,使用一些测试运行器也是很常见的,比如nose、pytest、zope.testrunner或者Distribute里面的那个。

6

我从来没有觉得需要其他东西,除了Python本身提供的。

由于Python采用了所谓的鸭子类型,所以创建一些简单的模拟对象非常容易,你只需要简单实现一下,然后可以查看里面的内容来检查你的判断是否正确。

我觉得unittest模块对我来说也很好用。

撰写回答