unittest.assertRaisesRegexp mit '^' am Anfang eines String

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Humbalan
User
Beiträge: 59
Registriert: Mittwoch 2. September 2009, 15:11

Hallo zusammen,

mit unittest habe ich eine seltsame Erscheinung bei assertRaisesRegexp(), wenn der Soll-String am Anfang ein '^' oder am Ende ein '$' oder beides enthält. Kleines Beispielprogramm:

Code: Alles auswählen

import unittest

def myfunc( param ) :
    try :
        int( param )
    except ValueError :
        raise KeyError, 'Error!'


class myTest( unittest.TestCase ) :

    def test_myfunc( self ) :
        ERRTXT = u'Error!'
        self.assertRaisesRegexp( KeyError, ERRTXT, myfunc, 'a' )


testsuite = unittest.TestSuite( [ unittest.TestLoader().loadTestsFromTestCase( myTest ) ] )
unittest.TextTestRunner().run( testsuite )
So, wie das hier gezeigt ist, ist das Testergebnis OK. Ändere ich den Wert von ERRTXT in u'^Error!' oder u'Error!$' oder u'^Error!$', dann liefert unittest z. B. die Meldung

Code: Alles auswählen

AssertionError: "^Error!$" does not match "'Error!'"
Ersetze ich KeyError durch IndexError, gibt es in allen vier Fällen ein OK. Könnt ihr mir helfen? Was mache ich da falsch?

Besten Dank im Voraus
Humbalan
BlackJack

@Humbalan: Im Grunde steht der Grund schon da: "^Error!$" does not match "'Error!'" und das tut es halt wirklich nicht, denn "^Error!$" würde "Error!" matchen. Kleiner, subtiler, aber wichtiger Unterschied. Noch mal live als Code:

Code: Alles auswählen

In [2]: print KeyError('Error!')
'Error!'

In [3]: print IndexError('Error!')
Error!
Benutzeravatar
Humbalan
User
Beiträge: 59
Registriert: Mittwoch 2. September 2009, 15:11

Oh Mann, danke BlackJack :D. Ich habe selbst solche Ausgaben produziert, die du hier zeigst, und habe sie mir hundert Mal auf dem Bildschirm angeschaut, die beiden kleinen "Strichlein" am Anfang und Ende sind mir nie aufgefallen :oops: . Danke.

Beste Grüße
Humbalan
Antworten