【问题标题】:How to test floats results with doctest?如何使用 doctest 测试浮点结果?
【发布时间】:2010-03-11 20:58:47
【问题描述】:

我正在开发一个程序来进行一些浮点计算。 有没有办法用 doctests 测试我的函数(提供浮点数)?

【问题讨论】:

    标签: python unit-testing floating-point doctest


    【解决方案1】:

    当然,只需根据您对浮点数的预期精度的了解,以合理的格式格式化浮点数 - 例如,如果您希望精度为小数点后 2 位,您可以使用:

    ''' Rest of your docstring and then...
    
        >>> '%.2f' % funcreturningfloat()
        '123.45'
    
    '''
    

    【讨论】:

      【解决方案2】:

      The documentation有建议

      浮点数也是 受到小的输出变化 跨平台,因为 Python 遵循平台 C 库 浮点格式,C 库各不相同 这里的质量很高。

      >>> 1./7  # risky
      0.14285714285714285
      >>> print 1./7 # safer
      0.142857142857
      >>> print round(1./7, 6) # much safer
      0.142857
      

      【讨论】:

        【解决方案3】:

        以下适用于鼻子测试:

        >>> 1/3.  # doctest: +ELLIPSIS
        0.333...
        

        【讨论】:

        • 这适用于重复小数(因为它们的最高有效数字不受浮点错误的影响),但通常不是。例如,">>> 1 - 10e-17" 返回 0.9999999999...,如果您测试“1.0...”,则不会匹配
        【解决方案4】:

        您可以使用 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 结束

        所有测试都通过了。 在您的测试中不需要字符串格式。

        【讨论】:

          【解决方案5】:

          字符串格式允许使用测试元组。

          >>> 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'
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-09-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-23
            相关资源
            最近更新 更多