【发布时间】:2012-05-10 13:58:18
【问题描述】:
我已经尝试学习 Python 大约 6 周了。在这个网站上阅读了很多关于 TDD 的内容后,我购买了 Roy Osherove 的 The Art of Unit Testing(很棒的书!),在学习 Python 的同时尝试和试验 TDD。这本书使用.NET,但似乎没有问题。存根就是存根,模拟就是模拟。
当我在网上阅读和查看 TDD 示例时,我真的觉得我明白为什么编码员会像他们那样编写代码。但是一旦我坐下来尝试自己,我一无所获。
让我给你举个昨天的例子:
我想为一个不太复杂的项目尝试 TDD。基本上,我想要的是一个类,它通过下载和解析 RSS 提要,保存一个包含(名称、日期)的元组列表。我为我的测试创建了一个新的 py 文件(还没有编写“真正的代码”)并编写了一个测试用例:
import unittest
from tv_schedule import TvSchedule
class TvScheduleTests(unittest.TestCase):
def test_download_success_and_parse_failure(self):
'''Successfully download RSS schedule for the specific user
but fail parsing it'''
self.tv = TvSchedule("User123")
# Check if ParserException was thrown I guess
if __name__ == "__main__":
unittest.main()
...然后我有点卡住了。我认为(大声笑!)。我真的需要一些关于这是否只是愚蠢和/或我如何才能做得更好的指示。我的直觉告诉我我做了坏事。
我想让 TvSchedule 类在后台进行下载/解析(使用feedparser),因此您只需创建该类的一个新实例,然后就可以使用它。也许这是糟糕的设计,也很难测试?另外,我将如何消除对通过网络检索 rss 提要的依赖?通过存根并始终返回包含示例提要的内存字符串?
一旦我离开了 TDD 教程和书籍喜欢使用的非常简单的计算器示例,我就陷入了困境。 :(
【问题讨论】:
-
我认为同时学习 Python 和 TDD 可能是个坏主意。 TDD 很棘手,可以在不添加新语言的情况下掌握窍门 :)
-
请注意,“纯”TDD 仅在您对代码的使用方向有很好的了解时才能很好地工作。您可能想开始编写足够多的代码来巩固您的想法,然后为它编写一个测试(这应该会消除您尚未解决的任何问题),然后修复您的代码。
-
@kigurai:可能是这样。我想我会尝试的。有些人似乎认为 TDD 思维模式更容易进入,而缺乏传统思维模式。