我正在为 Python Azure 函数编写一些测试,但在测试模块中出现导入错误。
<块引用>导入测试模块时出现导入错误...
<块引用>ModuleNotFoundError: No module named...
该错误仅在测试模块位于 /tests 目录中时发生。如果我进入根目录,它运行良好。
目录结构:
Project
/.venv
/function/Orchestrator/__init__.py
/function/ActivityA/__init__.py
/function/ActivityB/__init__.py
/function/tests/test_activities.py
test_activities.py
import unittest
from unittest.mock import Mock, patch
import ActivityA
错误:
ImportError while importing test module 'C:\Users\...\function\tests\test_activities.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
..\..\..\..\AppData\Local\Programs\Python\Python38\lib\importlib\__init__.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
function\tests\test_activities.py:4: in <module>
import A_WorkItemIds
E ModuleNotFoundError: No module named 'ActivityA'
我尝试使用相对路径来导入 ActivityA 模块,但出现不同的错误。
谁能告诉我为什么测试模块在 /tests 目录下不起作用?
有没有办法让它发挥作用?
我看过类似的问题,但没有一个给我答案。
谢谢
答案 0 :(得分:1)
您的测试文件夹中似乎缺少 __init__.py
。我无法使用复制您的问题的结构来重现您的错误。我建立了一个具有以下结构的目录:
functions/
├── ActivityA
│ └── __init__.py
└── tests
├── __init__.py
└── test_foo.py
test_foo.py
的内容如下:
import ActivityA
def test_fizz():
assert 1 == 1
当我运行测试时,我得到:
==>pytest tests/
============================= test session starts ==============================
platform darwin -- Python 3.9.1, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: ***/functions
collected 1 item
tests/test_foo.py . [100%]
============================== 1 passed in 0.02s ===============================
答案 1 :(得分:0)
通过一些修改设法解决了这个问题。
在测试模块 (test_activities.py) 中,我将 ActivityA 导入更改为:
from function import ActivityA
运行我使用的测试时:
python -m pytest function/tests