tam*_*gal 16 python unit-testing assert nan
我有功能,有时返回NaNs float('nan')
(我不使用numpy).
我怎么为它写一个测试,因为
assertEqual(nan_value, float('nan'))
Run Code Online (Sandbox Code Playgroud)
就像float('nan') == float('nan')
总是假的.可能有类似的东西assertIsNan
吗?我找不到任何关于它的东西......
LaG*_*tte 10
math.isnan(x)
会提出一个TypeError
if x
既不是a float
也不是a Real
.
最好使用这样的东西:
import math
class NumericAssertions:
"""
This class is following the UnitTest naming conventions.
It is meant to be used along with unittest.TestCase like so :
class MyTest(unittest.TestCase, NumericAssertions):
...
It needs python >= 2.6
"""
def assertIsNaN(self, value, msg=None):
"""
Fail if provided value is not NaN
"""
standardMsg = "%s is not NaN" % str(value)
try:
if not math.isnan(value):
self.fail(self._formatMessage(msg, standardMsg))
except:
self.fail(self._formatMessage(msg, standardMsg))
def assertIsNotNaN(self, value, msg=None):
"""
Fail if provided value is NaN
"""
standardMsg = "Provided value is NaN"
try:
if math.isnan(value):
self.fail(self._formatMessage(msg, standardMsg))
except:
pass
Run Code Online (Sandbox Code Playgroud)
然后你可以使用self.assertIsNaN()
和self.assertIsNotNaN()
.
使用 NumPy 更新:我知道 OP 没有使用numpy
. 然而,我不得不使用numpy
并没有找到任何帖子。因此,我将在这里为任何可能需要帮助的人留下答案。它也与图书馆完美配合unittest
。
import numpy as np
np.testing.assert_equal(nan_value, np.nan)
Run Code Online (Sandbox Code Playgroud)