Using py.test, two tests called the same in different directory causes py.test to fail. Why is that? How can I change this without renaming all the tests?
To duplicate do:
; cd /var/tmp/my_test_module ; mkdir -p ook/test ; mkdir -p eek/test ; touch ook/test/test_proxy.py ; touch eek/test/test_proxy.py ; py.test ============================= test session starts ============================== platform linux2 -- Python 2.7.3 -- pytest-2.2.4 collected 0 items / 1 errors ==================================== ERRORS ==================================== ___________________ ERROR collecting ook/test/test_proxy.py ____________________ import file mismatch: imported module 'test_proxy' has this __file__ attribute: /home/ygolanski/code/junk/python/mymodule/eek/test/test_proxy.py which is not the same as the test file we want to collect: /home/ygolanski/code/junk/python/mymodule/ook/test/test_proxy.py HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modules =========================== 1 error in 0.01 seconds ============================
Advertisement
Answer
Putting an __init__.py
is one way of resolving the conflict. Unlike nose, current pytest does not try to unload test modules in order to import test modules with the same import name. I used to think it’s a bit magic to do this auto-unimporting and might mess up people’s expectation from what the import mechanism does; sometimes people rely on the global state of a test module and with auto-unloading you lose it (a test module importing from another test module might then do unexpected things). But maybe it’s not a practical issue and thus pytest could add a similar hack …