Azure Function ImportError while importing test module / ModuleNotFoundError: No module named

Azure Function ImportError while importing test module / ModuleNotFoundError: No module named

我正在为 Python Azure 函数编写一些测试,但在测试模块中出现导入错误。

ImportError while importing 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\...\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 目录下的测试模块不起作用?

有没有办法让它发挥作用?

我查看了类似的问题,但其中 none 给了我答案。

谢谢

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