我正在尝试开始使用Python进行单元测试,我想知道是否有人可以解释doctest和unittest的优点和缺点.
你会用什么条件?
两者都很有价值.我使用doctest和nose代替unittest.我将doctest用于测试提供实际用作文档的用法示例的情况.一般来说,我不会将这些测试全面,仅仅是为了提供信息.我实际上反过来使用doctest:不是根据我的doctest测试我的代码是否正确,而是根据代码检查我的文档是否正确.
原因是我发现全面的doctests会使你的文档混乱得太多,所以你最终会得到不可用的文档字符串或者不完整的测试.
对于实际测试代码,目标是彻底测试每个案例,而不是通过示例来说明是什么,这是一个不同的目标,我认为其他框架可以更好地满足这些目标.
我几乎完全使用unittest.
有一段时间,我会把一些东西放在doctest可以使用的文档字符串中.
95%的测试用例是单元测试.
为什么?我喜欢让文档字符串更短,更重要.有时,测试用例有助于澄清文档字符串.大多数情况下,应用程序的测试用例对于文档字符串来说太长了.
doctesting的另一个优点是,您可以确保您的代码完成文档所说的功能.一段时间后,软件更改可以使您的文档和代码执行不同的操作.:-)
我是一名生物信息学家,我编写的大部分代码都是"一次,一个任务"的脚本,代码只运行一次或两次,执行一个特定的任务.
在这种情况下,编写大型单元测试可能过度,而doctests是一种有用的折衷方案.它们编写速度更快,并且由于它们通常包含在代码中,因此它们可以始终关注代码的行为方式,而无需打开其他文件.这在编写小脚本时很有用.
此外,当您必须将脚本传递给非编程专家的研究人员时,doctests非常有用.有些人发现很难理解单元测试的结构; 另一方面,doctests是一个简单的使用示例,因此人们可以复制并粘贴它们以了解如何使用它们.
所以,要恢复我的答案:当您必须编写小脚本时,以及必须将它们传递给非计算机科学家的研究人员时,doctests非常有用.
如果您刚刚开始使用单元测试的想法,我会首先考虑doctest
它,因为它使用起来非常简单.它自然也提供了一定程度的文档.对于更全面的测试doctest
,您可以将测试放在外部文件中,这样就不会使文档混乱.
我建议unittest
如果你来自使用JUnit或类似的东西的背景,你希望能够以与其他地方相同的方式编写单元测试.
我只使用unittest; 我认为doctest过多地混淆了主模块.这可能与编写全面的测试有关.
使用两者是一个有效且相当简单的选项.该doctest
模块提供了分别从模块或文件创建与单元测试兼容的测试套件的方法DoctTestSuite
和DocFileSuite
方法.
所以我使用两者并且通常使用doctest进行简单测试,其中的函数需要很少或不需要设置(参数的简单类型).我实际上认为一些doctest测试有助于记录功能,而不是减损它.
但是对于更复杂的情况,以及更全面的测试用例集,我使用unittest来提供更多的控制和灵活性.
我不使用doctest作为unittest的替代品.虽然它们有点重叠,但这两个模块没有相同的功能:
我unittest
用作单元测试框架,这意味着它可以帮助我快速确定任何修改对其余代码的影响.
我用来doctest
保证评论(即docstrings)仍然与当前版本的代码相关.
我得到的测试驱动开发的广泛记录的好处unittest
.doctest
解决了过时评论误导维护代码的更微妙的危险.