Azure函数import terror,而导入测试模块/ ModuleNotFoundError:没有模块命名.<



我正在为Python Azure函数编写一些测试,我在测试模块中得到一个导入错误。

import test module.

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...functionteststest_activities.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
........AppDataLocalProgramsPythonPython38libimportlib__init__.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
functionteststest_activities.py:4: in <module>
import A_WorkItemIds
E   ModuleNotFoundError: No module named 'ActivityA'

我已经尝试使用相对路径导入ActivityA模块,但得到不同的错误。

有人能告诉我为什么测试模块不能从/tests目录工作吗?

有办法让这个工作吗?

我看过类似的问题,但是没有一个人给我答案。

感谢

似乎您在测试文件夹中缺少__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 ===============================

通过几个修改成功解决了这个问题。

在测试模块(test_activities.py)中,我将ActivityA导入更改为:

from function import ActivityA

运行测试时,我使用:

python -m pytest function/tests

相关内容