2017-04-02 20 views
0

次のユニットテストをPythonで実行しますが、結果は正しいはずですが、単体テストが間違っています。Python unittestが失敗して終了する

間違いは何ですか?

これは私が

class Strategy: 
    _a = 0 
    _b = 0 
    _result = 0 

    def __init__(self, a, b): 

     try: 
      int(a) 
      int(b) 
     except ValueError: 
      raise ValueError() 

     self._a = a 
     self._b = b 

をテストする必要があるクラスです。これは私のunittestの

def test_invalideValue(self): 
    with self.assertRaises(ValueError) as cm: 
     StrategyAddition('A', 3) 

    self.assertEqual(cm.exception, ValueError()) 

であり、このプット

Failure 
Traceback (most recent call last): 
    File "C:\Users\Michi\workspace_python\DesignPatternPython\Strategy\TestStrategy.py", line 24, in test_invalideValue 
    self.assertEqual(cm.exception, ValueError()) 
AssertionError: ValueError() != ValueError() 

答えて

5

Exceptionオブジェクトは、カスタム平等テストを実装していません、 __eq__メソッドなしアイデンティティテストSは本当であることを行っています

>>> a = ValueError() 
>>> a == a 
True 
>>> a == ValueError() 
False 

self.assertRaisesだけとにかくをValueErrorインスタンスを捕まえると同じようにあなたは、すべてので平等をテストする必要はありません。あなたがValueErrorをされた例外をテストするためのさまざまな理由を持っていた場合は

、代わりにisinstance()を使用します。

self.assertTrue(isinstance(cm.exception, ValueError)) 

そうでない場合は、cm.exceptionは、特定の属性のように、例外のの側面をテストするしかありません。

関連する問題