I have a package with a directory "tests" in which I'm storing my unit tests. My package looks like:
.
├── LICENSE
├── models
│ └── __init__.py
├── README.md
├── requirements.txt
├── tc.py
├── tests
│ ├── db
│ │ └── test_employee.py
│ └── test_tc.py
└── todo.txt
From my package directory, I want to be able to find both tests/test_tc.py
and tests/db/test_employee.py
. I'd prefer not to have to install a third-party library (nose
or etc) or have to manually build a TestSuite
to run this in.
Surely there's a way to tell unittest discover
not to stop looking once it's found a test? python -m unittest discover -s tests
will find tests/test_tc.py
and python -m unittest discover -s tests/db
will find tests/db/test_employee.py
. Isn't there a way to find both?
In doing a bit of digging, it seems that as long as deeper modules remain importable, they'll be discovered via python -m unittest discover
. The solution, then, was simply to add a __init__.py
file to each directory to make them packages.
.
├── LICENSE
├── models
│ └── __init__.py
├── README.md
├── requirements.txt
├── tc.py
├── tests
│ ├── db
│ │ ├── __init__.py # NEW
│ │ └── test_employee.py
│ ├── __init__.py # NEW
│ └── test_tc.py
└── todo.txt
So long as each directory has an __init__.py
, python -m unittest discover
can import the relevant test_*
module.