How to check if value is nan in unittest?

风格不统一 提交于 2019-12-01 13:53:51

问题


I've got functions, which sometimes return NaNs with float('nan') (I'm not using numpy).

How do I write a test for it, since

assertEqual(nan_value, float('nan'))

is just like float('nan') == float('nan') always false. Is there maybe something like assertIsNan? I could not find anything about it…


回答1:


I came up with

assertTrue(math.isnan(nan_value))



回答2:


math.isnan(x) will raise a TypeError if x is neither a float nor a Real.

It's better to use something like this :

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

You can then use self.assertIsNaN() and self.assertIsNotNaN().



来源:https://stackoverflow.com/questions/16890902/how-to-check-if-value-is-nan-in-unittest

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!