将源文件导入测试文件



我有以下目录结构:

Project
├── README.md
├── app
│   ├── __init__.py
│   └── main.py
│   
├── tests
│   ├── __init__.py
│   └── test_one.py

我想在test_one中导入app.main。我经历了类似的堆栈溢出问题,并尝试将路径添加到test_one.py文件中的应用程序文件夹,如下所示:

sys.path.append('/path to project/app')

但是,我收到以下错误:

模块

未找到错误:没有名为"app"的模块

如何将文件从应用程序导入到test_one.py文件中?有没有一个简单的from ... import语句来实现这一点?

您没有提到您正在使用的单元测试框架,但是如果您使用的是pytest,它已经支持测试在应用程序代码之外的那种应用程序/测试组织。

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 =============================================================================

相关内容

  • 没有找到相关文章

最新更新