Из документа 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> на моей рабочей станции).
Надеюсь, это поможет :)