2013-06-03 1 views
11

У меня есть функции, которые иногда возвращают NaN с float('nan') (я не использую numpy).Как проверить, является ли значение nan в unittest?

Как написать тест для него, так как

assertEqual(nan_value, float('nan')) 

точно так же как float('nan') == float('nan') всегда ложно. Может быть, что-то вроде assertIsNan? Я не мог найти ничего об этом ...

+0

Возможный дубликат [Как вы проверяете, соответствует ли двойное значение NaN в Java?] (Http://stackoverflow.com/questions/1456566/how-do-you-test-to-see-if -a-дважды в равных к нан-в-Java) – Raedwald

ответ

7

math.isnan(x) поднимет TypeError если x не является ни float, ни 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 

Вы можете использовать self.assertIsNaN() и self.assertIsNotNaN().

Смежные вопросы