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 _______________________________________________ py-dev mailing list py-dev@codespeak.net http://codespeak.net/mailman/listinfo/py-dev