2013-06-03 5 views
11

私は時々float('nan')(私はnumpyを使用していません)でNaNを返す関数を持っています。unittestに値がないかどうかを確認する方法は?

assertEqual(nan_value, float('nan')) 

は常にちょうどfloat('nan') == float('nan')ように偽であるので、私は、それのためのテストを書くにはどうすればよい

。多分assertIsNanのようなものがありますか?私は

assertTrue(math.isnan(nan_value)) 
+0

[JavaでNaNとdoubleが等しいかどうかをテストするにはどうすればよいですか?](http://stackoverflow.com/questions/1456566/how-do-you-test-to-see-if -a-double-is-equal-to-nan-in-java) – Raedwald

答えて

10

をそれについて何かを見つけることができませんでしたxfloatRealでもない場合TypeErrorが発生します。

それはこのようなものを使用することをお勧めします:

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()を使用することができます。

7

math.isnan(x)を思い付いた...

関連する問題