Forums Neueste Beiträge
 

Instanzen in Unit Tests erzeugen

02/06/2008 - 03:43 von Dirk Olmes | Report spam
Hi,

ich schreibe gerade meinen ersten Unit Test in Python und stolpere über
seltsames Verhalten in Subklassen von unittest.TestCase: ich bekomme
immer die gleiche Instanz einer Klasse, selbst wenn ich neue Instanzen
erzeugen lassen will.

Testcode:

class Bean:
def __init__(self, name):
self.name = name

if __name__ == "__main__":
b1 = Bean("Hansi")
print b
b1 = Bean("Hansi")
print b
print b1 == b2

Das letzte Statement gibt wie erwartet False aus.

Jetzt mal mit unittest:

class Tester(unittest.TestCase):
def testNewObject1(self):
object = Bean("hansi")
print object

def testNewObject2(self):
object = Bean("hansi")
print object

if __name__ == "__main__":
unittest.main()

gibt folgende Ausgabe:

..
-
Ran 2 tests in 0.000s

OK
<__main__.Bean instance at 0xb76beeac>
<__main__.Bean instance at 0xb76beeac>

Wieso hat die Bean zweimal die gleiche Adresse, sprich, ist zweimal die
gleiche Instanz?

Wenn ich in einem Test mehr als eine neue Instanz erzeuge, also z.B. in
testNewObject1 nochmal "object = Bean("Hansi")" aufrufe, dann ist die
neue Instanz in testNewObject2 die gleiche, wie die zuletzt erzeugte in
testNewObject1

Hat jemand eine Erklàrung dafür?

-dirk
 

Lesen sie die antworten

#1 Florian Diesch
02/06/2008 - 06:30 | Warnen spam
Dirk Olmes wrote:

ich schreibe gerade meinen ersten Unit Test in Python und stolpere über
seltsames Verhalten in Subklassen von unittest.TestCase: ich bekomme
immer die gleiche Instanz einer Klasse, selbst wenn ich neue Instanzen
erzeugen lassen will.

Testcode:

class Bean:
def __init__(self, name):
self.name = name

if __name__ == "__main__":
b1 = Bean("Hansi")
print b
b1 = Bean("Hansi")
print b
print b1 == b2

Das letzte Statement gibt wie erwartet False aus.

Jetzt mal mit unittest:

class Tester(unittest.TestCase):
def testNewObject1(self):
object = Bean("hansi")
print object

def testNewObject2(self):
object = Bean("hansi")
print object

if __name__ == "__main__":
unittest.main()

gibt folgende Ausgabe:

..
-
Ran 2 tests in 0.000s

OK
<__main__.Bean instance at 0xb76beeac>
<__main__.Bean instance at 0xb76beeac>

Wieso hat die Bean zweimal die gleiche Adresse, sprich, ist zweimal die
gleiche Instanz?



Es sind verschiedene Instanzen. Da sie nicht gleichzeitig existieren,
spricht nichts dagegen, dass für beide der gleiche Speicherbereich
genutzt wird.

BTW, 'object' ist klein guter Variablenname, da du damit die
gleichnamige Standard-Funktion ausblendest.


Andere Testing-Frameworks, wie z.B. nose
<http://somethingaboutorange.com/mrl.../nose/> sind in vielen
Fàllen einfacher zu benutzen und/oder flexibler als unittest


Florian
<http://www.florian-diesch.de/>
** Hi! I'm a signature virus! Copy me into your signature, please! **

Ähnliche fragen