Nose, teardown, open(), OSError

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
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Wenn ich mit dem Unittest "Framework" nose versuche, (mittels dem tool nosetests) diese tests ausführen zu lassen:

http://paste.pocoo.org/show/93328/

kommt das hier dabei raus:

Code: Alles auswählen

world.py: WorldDirector: Initing and Testing ... ok

======================================================================
ERROR: test suite for <module 'test_main.test_filetype_utils.test_plugin' from '/media/Daten/Projects/Quetzalcoatl/master/tests/test_main/test_filetype_utils/test_plugin.pyc'>
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/var/lib/python-support/python2.5/nose/suite.py", line 166, in run
    self.tearDown()
  File "/var/lib/python-support/python2.5/nose/suite.py", line 255, in tearDown
    self.teardownContext(ancestor)
  File "/var/lib/python-support/python2.5/nose/suite.py", line 272, in teardownContext
    try_run(context, names)
  File "/var/lib/python-support/python2.5/nose/util.py", line 453, in try_run
    return func()
  File "/media/Daten/Projects/Quetzalcoatl/master/tests/test_main/test_filetype_utils/test_plugin.py", line 33, in teardown
    os.remove(TEMP_NAME)
OSError: [Errno 2] No such file or directory: 'temporary.py'

======================================================================
ERROR: test suite for <module 'test_main.test_parsesystem' from '/media/Daten/Projects/Quetzalcoatl/master/tests/test_main/test_parsesystem.pyc'>
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/var/lib/python-support/python2.5/nose/suite.py", line 166, in run
    self.tearDown()
  File "/var/lib/python-support/python2.5/nose/suite.py", line 255, in tearDown
    self.teardownContext(ancestor)
  File "/var/lib/python-support/python2.5/nose/suite.py", line 272, in teardownContext
    try_run(context, names)
  File "/var/lib/python-support/python2.5/nose/util.py", line 453, in try_run
    return func()
  File "/media/Daten/Projects/Quetzalcoatl/master/tests/test_main/test_filetype_utils/test_plugin.py", line 33, in teardown
    os.remove(TEMP_NAME)
OSError: [Errno 2] No such file or directory: 'temporary.py'

----------------------------------------------------------------------
Zuerst wollte ich mir das bloß wegen "imp" nicht antun, aber StringIO Fakes akzeptiert imp leider nicht.

Zusätzlich wird eine Datei mit dem namen "c" erstellt. Versuche ich, die Tests von Hand laufen zu lassen, klappt es (wobei die Datei "c" auch hier erstellt wird?). Ich habe mir daraufhin den betroffenen code von nose angeschaut, und dort war (wie erwartet) absolut nichts verdächtiges zu finden. Das "working dir" bleibt auch das gleiche. Hab ich Tomaten auf den Augen ..?

EDIT: Der open() Aufruf vor teardown ist natürlich Debugging Müll, weil Nose "print" und "sys.stdout.write" verschluckt. Achja, und das plugin.load_module lädt nur mithilfe von imp eine Python Datei, sind 5 Zeilen Code, bloß try / finally und imp.acquire_lock() usw.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

:roll: setup und teardown sollte man seine Funktions - with_setup Funktionen natürlich nicht nennen, wenn so bereits die Funktionen heißen, die standardmässig ausgeführt werden, wenn ein Test Modul geladen wird - dumm gelaufen. Meine Tests laufen nach einem Umbenennen nun durch.

Die Datei, die bloß "c" heißt, wird aber immernoch erstellt.. Was ich mir nicht erklären kann. Aber sollte ich das nicht beheben können, kann ich die teardown Methode sicherlich mit einem Workaround ausstatten.
Antworten