2017-04-02 11 views
0

Ich führe den folgenden Komponententest in Python, sollte das Ergebnis korrekt sein, aber der Komponententest geht schief.Python Unittest endet mit Fehler

Was ist der Fehler? Diese

ist die Klasse I testen

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 

Das ist mein Unittest

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

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

und dies die Put-

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() 

Antwort

5

Exception Objekte implementieren keine benutzerdefinierten Gleichheitstests, und ohne eine __eq__ Methode nur Identitätstest s gehen um wahr zu sein:

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

Sie nicht für die Gleichstellung bei allen testen müssen, wie self.assertRaises nur eine ValueError Instanz sowieso fangen würde.

Wenn Sie einen anderen Grund für die Ausnahme zu testen, haben ein ValueError sein, verwenden isinstance() statt:

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

Ansonsten cm.exception nur gibt es andere Aspekte der Ausnahme zu testen, wie bestimmte Attribute .