Seite 1 von 1

unittest.assertRaisesRegexp mit '^' am Anfang eines String

Verfasst: Mittwoch 18. November 2015, 10:22
von Humbalan
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

Re: unittest.assertRaisesRegexp mit '^' am Anfang eines String

Verfasst: Mittwoch 18. November 2015, 10:51
von 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!

Re: unittest.assertRaisesRegexp mit '^' am Anfang eines String

Verfasst: Mittwoch 18. November 2015, 15:36
von Humbalan
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