Python import src modules when running tests
PythonUnit TestingImportPython Problem Overview
My source files are located under src and my test files are located under tests. When I want to run a test file, say python myTest.py, I get an import error: "No module named ASourceModule.py".
How do I import all the modules from source needed to run my tests?
Python Solutions
Solution 1 - Python
You need to add that directory to the path:
import sys
sys.path.append('../src')
Maybe put this into a module if you are using it a lot.
Solution 2 - Python
If you don't want to add the source path to each test file or change your PYTHONPATH
, you can use nose to run the tests.
Suppose your directory structure is like this:
project
package
__init__.py
module.py
tests
__init__.py
test_module.py
You should import the module normally in the test_module.py
(e.g. from package import module
). Then run the tests by running nosetests
in the project folder. You can also run specific tests by doing nosetests tests/test_module.py
.
The __init__.py
in the tests
directory is necessary if you want to run the tests from inside it.
You can install nose easily with easy_install
or pip
:
easy_install nose
or
pip install nose
nose extends unittest in a lot more ways, to learn more about it you can check their website: https://nose.readthedocs.org/en/latest/
Solution 3 - Python
On my system (Windows 10), I was required to do something like this:
import sys
import os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../src")
Appending the relative directory directly to sys.path
did not work
Solution 4 - Python
The best (most manageable) solution appears to be using a virtualenv and setuptools/distribute to install a development copy of your (src) package. That way your tests execute against a fully "installed" system.
In the pystest docs there is a section on "good practices" explaining this approach, see here.