0

Kann jemand überprüfen, ob eine Ausnahme korrekt ausgelöst wird?Überprüfen Sie, ob eine Ausnahme in Python 2.7 korrekt ausgelöst wurde.

Ich brauche etwas, das in Python 2.7 funktioniert. Die unter ‚assert‘ ist nicht ganz richtig Methode aus dem Python Unittest-Bibliothek zu verwenden:

assert (a_a0_getinst.add_port("iTCK", ISC.PortType_INPUT)), "Can't add duplicate port" 

Der Fehler, den ich bekommen ist:

Traceback (most recent call last): 
    File "test_010_module.py", line 157, in runTest 
    a_a0_addinst = a_a0.add_instance("A00", b_a0) 
    File "/nfs/sc/disks/sc_dteg_2004/users/acheung1/dteg_tools-isc/python/t/ISC.py", line 475, in add_instance 
    return _ISC.SharedModule_add_instance(self, name, module) 
RuntimeError: Can't add duplicate instance with instance name 'A00' to module 'A_A0' 

Antwort

0

Wenn Sie nur sicherstellen mögen, es wirft die richtige Art der Ausnahme, können Sie verwenden:

self.assertRaises(RuntimeError, your_function, *args, **kwargs) 

in einem Unitt est.TestCase-Klasse. Siehe the docs for assertRaises.

Wenn Sie wollen auch zu prüfen, ob sie auch die Nachricht richtige Fehler hat, können Sie stattdessen verwenden:

self.assertRaisesRegexp(RuntimeError, "error message", your_function_call, *args, **kwargs) 

in einer unittest.TestCase Klasse. Hier sind the docs for assertRaisesRegexp.

Sie können auch diese als Kontext-Manager tun, in diesem Fall müssen Sie nicht die Argumente trennen:

with self.assertRaises(RuntimeError): 
    your_function_call(arg1, arg2) 

with self.assertRaisesRegexp(RuntimeError, "error message"): 
    your_function_call(arg1, arg2) 

Das ist für Python 2.7, wie Sie bereits erwähnt. Für Python 3.x verhält sich assertRaises gleich, aber der reguläre Ausdruck heißt assertRegex (keine p).

EDIT: Wie in den Kommentaren darauf hingewiesen, funktioniert dies nur, wenn Sie Unittest-Stil Testklassen verwenden. Wenn Sie py.test verwenden, it has its own similar methods you can use.

+0

Angenommen, OP verwendet unittest. – tdelaney

+0

Danke, bouteilleBleu! Ich tat dies: self.assertRaises (Runtime, a_a0.add_instance ("A00", b_a0)) ... aber ich bin immer noch am selben Fehler wie oben erwähnt in der Problemstellung. –

+0

auch versucht, "self.assertRaisesRegexp (Runtime "Kann doppelte Instanz mit Instanznamen 'A00' in der Modul 'A_A0'", a_a0.add_instance ("A00", b _a0))" mit Fehlern: Traceback (most ... last): Datei "test_010_module.py", Zeile 157, im runTest self.assertRaisesRegexp (RuntimeError, "Kann keine doppelte Instanz mit dem Instanznamen 'A00' zum Modul 'A_A0'", a_a0 hinzufügen. add_instance ("A00", b_a0)) Datei "xxx", Zeile x, in add_instance Rückgabe _ISC.SharedModule_add_instance (self, name, Modul) RuntimeError: Kann keine doppelte Instanz mit dem Instanznamen 'A00' zum Modul 'hinzufügen A_A0 –

Verwandte Themen