- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Numpy 的 log 方法为 log(0) 提供 -inf。这个值是可比较的:
>>> np.log(0) == np.log(0)
True
现在在单元测试中以下工作正常:
self.assertEqual(np.log(0),np.log(0))
但这失败了:
self.assertAlmostEqual(np.log(0),np.log(0))
为什么会有这样的行为?这是错误还是有意为之?如果需要,我如何检查两个浮点值是否几乎相等,同时对 -inf 也能正常工作?
最佳答案
来自 unittest 的文档 assertAlmostEqual(a, b)默认情况下等同于 round(a-b, 7) == 0
。所以在你的情况下你有:
In [8]: np.log(0) - np.log(0)
Out[8]: nan
In [9]: round(np.log(0) - np.log(0), 7)
Out[9]: nan
In [11]: np.nan == 0
Out[11]: False
这就解释了为什么你的测试失败了。
要使其正常工作,请使用 unittest2这是一个例子:
import unittest2
import numpy as np
class Test_Assertions(unittest2.TestCase):
def test_float_inf(self):
self.assertAlmostEqual(float('inf'), float('inf'))
def test_numpy_inf(self):
self.assertAlmostEqual(np.log(0),np.log(0))
unittest2.main()
输出:
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
注意:在 unittest2 assertAlmostEqual()
中,首先测试两个对象是否相等,如果是,那么结果是是,否则执行魔术(几乎相等),这就是它起作用的原因。它也应该在新的 python 版本(2.7 >)中工作,因为它们中的大多数都实现了 unittest2 功能(我不确定这一点,因为我的工作站中没有 python 2.7 >)。
希望这可以帮助:)
关于python - 为什么 assertAlmostEqual(-inf,-inf) 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5376853/
我正在尝试测试两个对象是否相等。这个对象的类型是Point,是ROS(Robot Operating System)定义的一个类。我有以下测试: def test_when_getting_posit
assertAlmostEqual(x, y) 中的 Python's unit testing framework 方法测试 x 和 y 是否近似相等,假设它们是 float 。 assertAlm
Numpy 的 log 方法为 log(0) 提供 -inf。这个值是可比较的: >>> np.log(0) == np.log(0) True 现在在单元测试中以下工作正常: self.assert
我是一名优秀的程序员,十分优秀!