从 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
注意:在 unittest2assertAlmostEqual()
中,首先测试两个对象是否相等,如果是,那么结果是肯定的,否则做魔法(几乎相等),这就是它起作用的原因。它也应该在新的python版本(2.7>)中工作,因为它们中的大多数都实现了unittest2功能(我不确定这一点,因为我的工作站中没有python 2.7>)。
希望这可以帮助:)