2016-05-31 8 views
2

私はユニットテストをしようとしていますが、なぜこれらの2つのdictsが等しくないのかわかりません。誰かが私にこの出来事の説明を与えることができるかどうか疑問に思っていた。私のコードは、私がassertEqualassertEqualsassertDictEqualsについて同じ結果を得る...Unittest - dict equalityのテスト

import unittest 

class TestEmailValidator(unittest.TestCase): 

    def test(self): 
     known_dict = { 
      '[email protected]': True, 
      '[email protected]': False 
     } 

     result_dict = {} 

     for key in known_dict.keys(): 
      result_dict[key] = is_email_valid(key) 

     # debugger results 
     # result_dict = { 
     # '[email protected]': True, 
     # '[email protected]': False 
     # } 

     if self.assertEqual(known_dict, result_dict): 
      print "is_email_valid passed" 
     else: 
      print "is_email_valid failed" 

if __name__ == '__main__': 
    unittest.main() 

です。テストの前にresult_dictknown_dictに割り当てようとしましたが、どちらも失敗しました。

なぜこのようなことが起こっているのか誰かが私に指摘できれば素晴らしいと思います。読んでくれてありがとう。 :)

+0

'is_email_valid'はかなり基本的で、' foobar.com'で文字列が終わるとTrueを返します。 –

答えて

0

あなたは主張を悪用しています。すべてのassertXYZメソッドはブール値を返さず、アサーションが失敗した場合に例外を送出します。これらのメソッドは何も返さないため、暗黙的にNoneを返します。ブール値としてNoneを評価すると、それは偽と見なされるため、テストでは実際にテストが実行されてもis_email_valid failedが出力されます。

+0

Aha。意味あり。私がassert ..メソッドを使ってデバッグしていたとき、例外をスローしていなかったようです。助けてくれてありがとう@mureinik。 –

関連する問題