【发布时间】:2010-03-11 20:58:47
【问题描述】:
我正在开发一个程序来进行一些浮点计算。 有没有办法用 doctests 测试我的函数(提供浮点数)?
【问题讨论】:
标签: python unit-testing floating-point doctest
我正在开发一个程序来进行一些浮点计算。 有没有办法用 doctests 测试我的函数(提供浮点数)?
【问题讨论】:
标签: python unit-testing floating-point doctest
当然,只需根据您对浮点数的预期精度的了解,以合理的格式格式化浮点数 - 例如,如果您希望精度为小数点后 2 位,您可以使用:
''' Rest of your docstring and then...
>>> '%.2f' % funcreturningfloat()
'123.45'
'''
【讨论】:
浮点数也是 受到小的输出变化 跨平台,因为 Python 遵循平台 C 库 浮点格式,C 库各不相同 这里的质量很高。
>>> 1./7 # risky
0.14285714285714285
>>> print 1./7 # safer
0.142857142857
>>> print round(1./7, 6) # much safer
0.142857
【讨论】:
以下适用于鼻子测试:
>>> 1/3. # doctest: +ELLIPSIS
0.333...
【讨论】:
您可以使用 numtest - 一个 doctest 扩展,可简化数值结果的测试。 https://pypi.python.org/pypi/numtest
>>> 1.0/3
0.333
失败的例子: 1.0/3 预期的: 0.333 拿到: 0.3333333333333333
>>> 1.0/3 # doctest: +NUMBER
0.333
import doctest
import numtest
doctest.testmod()
进程以退出代码 0 结束
所有测试都通过了。 在您的测试中不需要字符串格式。
【讨论】:
字符串格式允许使用测试元组。
>>> funcreturningfloattuple(1.0)
(1.0, 1.0)
>>> '%.2f, %.2f' % funcreturningfloattuple(1.0)
'1.00, 1.00'
>>> funcreturningfloattuple(1.4)
(1.3999999999999999, 1.3999999999999999)
>>> '%.2f, %.2f' % funcreturningfloattuple(1.4)
'1.40, 1.40'
【讨论】: