【问题标题】:First steps with tddtdd 的第一步
【发布时间】:2012-08-19 05:45:35
【问题描述】:

我目前正在一个业余项目上尝试测试驱动开发的过程,虽然我确实理解这个概念(先编写单元测试,观察它失败,让它工作,重构你的代码)我仍然有一些问题.

我正在进行的项目是 Python 中的 MUD 客户端。现在我正忙于实现 telnet 协议。 (我知道 Python 中已经有一个 telnetlib 或者 Twisted 中已经有一个实现,但这不是重点)

现在我有一个 TelnetHandler 类,它实现 Telnet 协议(或至少部分协议)和各种单元测试。 因为它们相当大,所以它们在 pastebin 上:TelnetHandlerunit tests

我现在的问题如下:

  • 很多测试相互依赖:例如,如果 test_handle_read 测试失败,那么很多其他测试也会失败。
  • TelnetOptionsTests 中,我添加了我的类应该调用的方法,以检查它们是否被调用(各种local_option_enabled 方法)。现在,我的课堂上没有这些方法。我应该添加单元测试来检查它们的存在吗?
  • 当我开始编写测试时,我将handle_read 方法更改为也解析 telnet 命令。之后,一旦我完成了测试,我将handle_read 拆分为各种_handle_do_handle_dont 等...但是我没有针对这些的单元测试,因为它们正在原始handle_read 中进行测试.这是正确的方法,还是在将方法拆分为不同方法时编写单元测试也是一种好习惯?

基本上,我要问的是各种可以帮助我提高单元测试技能的提示和指针。

谢谢!

【问题讨论】:

  • UnitTests 的全部意义在于将被测系统的范围缩小到可以单独测试的小子集。

标签: python unit-testing tdd


【解决方案1】:

很多测试相互依赖:例如,如果 test_handle_read 测试失败,那么很多其他测试也会失败。

不要这样做。在每个测试开始时,把世界扔掉,然后按照测试运行的方式重新创建它。

当我开始编写测试时,我将 handle_read 方法更改为也解析 telnet 命令。之后,一旦我完成了测试,我将 handle_read 拆分为各种 _handle_do、_handle_dont 等……但是我没有对这些进行单元测试,因为它们正在原始的 handle_read 中进行测试。这是正确的方法,还是在将方法拆分为不同方法时编写单元测试也是一种好习惯?

这取决于。当您拆分时,您是拆分成不同的公共方法,还是它们是处理实现的私有方法。

【讨论】:

  • 举个例子,test_will_do:在那里我测试当远程端回答特定答案时会发生什么。如果 test_handle_read 已经失败,那么这意味着从套接字读取的所有内容都将失败。我是否应该在每次测试中测试 handle_read 如何与我想要测试的内容一起工作?我试图让测试只测试一件特定的事情。至于拆分:我确实将它拆分为私有方法。
  • so 'test_will_do' 没有失败 因为 'handle_read' 失败是因为你的代码有问题?在开始实际测试之前,您可以使用“Assert.Inconclusive”(C#)之类的东西进行验证。我不会直接测试私有方法。
  • 感谢您的帮助!现在更有意义了。
猜你喜欢
  • 1970-01-01
  • 2015-08-30
  • 2010-10-04
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多