我具有以下目录结构:
Project
├── README.md
├── app
│ ├── __init__.py
│ └── main.py
│
├── tests
│ ├── __init__.py
│ └── test_one.py
我想在test_one中导入app.main。我经历了类似的stackoverflow问题,并尝试将路径添加到test_one.py文件中的app文件夹,如下所示:
sys.path.append('/path to project/app')
但是,出现以下错误:
ModuleNotFoundError:没有名为“ app”的模块
如何将文件从应用程序导入到test_one.py文件中?从... import语句有没有简单的方法可以实现这一点?
答案 0 :(得分:0)
您没有提到正在使用什么单元测试框架,但是如果您使用的是pytest,那么它已经支持the tests are outside the application code中的那种应用程序/测试组织。
setup.py mypkg/ __init__.py app.py view.py tests/ test_app.py test_view.py ...
- ..
- 如果您没有
setup.py
文件,并且依赖以下事实: Python默认情况下将当前目录放入sys.path
中以进行导入 您的软件包,您可以执行python -m pytest
来执行测试 直接针对本地副本,而不使用pip
。
您的代码已经正确构建。您无需手动设置sys.path
。您可以正常使用from app import main
(请参阅下面的示例 test_one.py )。我唯一要添加的是 pytest.ini ,用于指定测试路径和测试文件的模式。
目录结构:
Project
├── pytest.ini
├── app
│ ├── __init__.py
│ └── main.py
│
├── tests
│ ├── __init__.py
│ └── test_one.py
pytest.ini :
[pytest]
addopts = -v
console_output_style = count
python_files = test_*.py
testpaths = tests
样本 main.py :
def calculate(x, y):
return x + y
样本 test_one.py :
from app import main
def test_calculate():
assert(3 == main.calculate(1, 2))
运行pytest:
$ pytest tests
=============================================================================== test session starts ===============================================================================
platform linux -- Python 3.7.2, pytest-4.6.2, py-1.8.0, pluggy-0.12.0 -- /home/gino/.virtualenvs/test-py37/bin/python3.7
cachedir: .pytest_cache
rootdir: /home/gino/Project, inifile: pytest.ini, testpaths: tests
collected 1 item
tests/test_one.py::test_calculate PASSED [1/1]
============================================================================ 1 passed in 0.01 seconds =============================================================================