dan*_*iel 12 python doctest unit-testing
我所参与的项目的开发人员认为,doctests与单元测试一样好,并且如果一段代码被证明,则不需要进行单元测试.我不相信这是事实.任何人都可以提供一些可靠的,理想上引用的例子来支持或反对doctests取代单元测试需求的论点吗?
谢谢-Daniel
编辑:任何人都可以提供一个参考,表明doctesting不应该取代单元测试?
Ale*_*lli 20
我(AB)用于doctest
代替unittest
,回来时,我开始了我的gmpy多年前项目-你可以浏览它的来源和看到所有的功能都布满了文档测试测试(功能的由C-编码的Python扩展提供,上次我为覆盖率测量进行了检测,我的覆盖率超过了95%.我为什么这样做?因为这doctest
是全新的,gmpy
我很想知道我能推动多远.
答:确实非常 - 但绝对不值得(新奇感消失,但你不想重写所有的测试,这就是为什么gmpy的测试仍然是全文测试的原因).医生的极端脆弱性,即使在信息中最微小的拼写错误也会破坏测试,当他们被这种方式滥用时,真的很麻烦.这有点像基于输出与"黄金"(已知良好)预期的输出比较传统的集成测试:易周围第一次写,但你在闲暇经过短短几年的固定无偿试验破损的忏悔; - ).
如果您发现unittest
的风格繁重,但是也有一些其它的优秀替代品意味着用于单元测试,如py.test和鼻子 - doctest
真的意味着一个不同的目的(支持文档,而不是普通的单元测试),并同时它当然值得为你的测试电池添加你为文档目的编写的任何doctests ,用它替换单元测试的测试维护难题是不值得的.
确实没有支持或反对doc测试的论据.它们只是测试.事实上,从python 2.4开始,有一种方法可以从你的doctests创建单元测试服:http://docs.python.org/library/doctest.html#unittest-api
从某种意义上说,你可以将doc-tests视为单元测试的一个子集,至少从功能的角度来看.
但是python文档建议使用doctests来实现以下目的:
他们的论点是,如果你在文档中编写测试,你将被迫编写更好的文档和测试.与单独编写单元测试相反 - 您很少添加足够的文档,并且它们往往会停滞不前并且过时.
请参阅:http: //docs.python.org/library/doctest.html#soapbox
我认为doctests更难为集成测试这样的事情写作.但是,正如您在python和Django上看到的那样 - 他们广泛使用doctests,从而产生更易理解的文档和教程.
这一切都取决于你的项目.没有"正确"的方法来测试.
另外,我建议您查看Code Complete 2本书,因为您可能会发现单元测试不是确保您的软件无故障的最佳方法.
Python标准库中有一个具体的例子,说服我单凭doctests并不总是足够,即decimal
模块.它有超过60000个单独的测试用例(在Lib/test/decimaltestdata中); 如果所有这些都被重写为doctests,十进制模块确实会变得非常笨拙.测试数量可能会减少,同时仍能提供良好的覆盖率,但许多数值算法都非常复杂,需要大量的单独测试才能涵盖所有可能的分支组合.
归档时间: |
|
查看次数: |
3064 次 |
最近记录: |