[py-dev] Test directories for py.test
Carl Friedrich Bolz
cfbolz at gmx.de
Fri Feb 23 15:14:42 CET 2007
Hi Tom!
Tom Harris wrote:
> I like to have my tests in a subdirectory for a project, so directory
> 'foo' would have a subdirectory 'test'. The tests in 'test' should be
> able to load module foo.py in it's parent directory, with a
> sys.path.insert(0, '..'). That's the way I did it with unittest anyway.
> Example below fails unless I insert a '.' instead of '..' into sys.path.
>
> file 'foo/foo.py':
> def a(): return 1
>
> file 'foo/test/test_foo.py':
> import sys
> sys.path.insert(0, '..')
> import foo
>
> def test_1():
> assert foo.a() == 1
>
> Now I'm quite happy to type import sys; sys.path.insert(0, '.') at the
> head of all my test files, but am I missing something?
Since this is quite a common problem, There is a built-in solution in
py.test :-). The idea is the following: py.test inserts a certain path into
sys.path. Which path that is, is determined by walking up the
directories starting from the test dir until it finds a directory that
does not have an __init__.py file. So what you could do:
file 'foo/__init__.py':
# empty or whatever
file 'foo/bar.py':
def a(): return 1
file 'foo/test/__init__.py':
# empty or whatever
file 'foo/test/test_bar.py':
from foo import bar
def test_a():
assert bar.a() == 1
This allows you to have a deeper directory hierarchy and always the
right directory is inserted (as long as you have __init__.py files
everywhere but in the dir above your project).
Cheers,
Carl Friedrich
More information about the Pytest-dev
mailing list