I discovered that when I run pytest
with coverage, the coverage report shows that the tests do not fully cover the code, even though the tests execute the relevant code.
Full Coverage Command (100% Coverage)
coverage run --source=/root/MyProject/lib_python -m pytest /root/MyProject/tests/lib_python/test_something.py
Partial Coverage Command (50% Coverage)
cd /root/MyProject; coverage run --source=lib_python -m pytest
cd /root/MyProject; coverage run --source=lib_python -m pytest /root/MyProject/tests/lib_python/
Using the second command, the coverage report indicates that the lines return a + b
and return a - b
in lib_python/something.py
are not covered.
Context:
- PYTHONPATH:
/root/MyProject/lib_python
- My module doesn’t have a package name. It is unusual but it’s due to legacy reasons.
Code Files:
lib_python/something.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
tests/lib_python/test_something.py
python
from something import add, sub
def test_add():
assert add(1, 2) == 3
assert add(-1, 1) == 0
assert add(0, 0) == 0
def test_sub():
assert sub(2, 1) == 1
assert sub(1, 1) == 0
assert sub(0, 1) == -1
How do I get my coverage command to find and match coverage with the actual file?