Python 导入测试模块/ModuleNotFoundError时Azure函数导入错误:没有名为的模块

Python 导入测试模块/ModuleNotFoundError时Azure函数导入错误:没有名为的模块,python,azure-functions,pytest,python-unittest,Python,Azure Functions,Pytest,Python Unittest,我正在为Python Azure函数编写一些测试,测试模块中出现导入错误 导入测试模块时导入错误 ModuleNotFoundError:没有名为 只有当测试模块位于/tests目录中时,才会发生此错误。如果我进入根目录,它运行正常 目录结构: Project /.venv /function/Orchestrator/__init__.py /function/ActivityA/__init__.py /function/ActivityB/__init__.py /function/tes

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

导入测试模块时导入错误

ModuleNotFoundError:没有名为

只有当测试模块位于/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'
导入测试模块“C:\Users\…\function\tests\test\u activities.py”时导入错误。 提示:确保您的测试模块/包具有有效的Python名称。 回溯: ..\..\..\..\AppData\Local\Programs\Python\Python38\lib\importlib\\uuuuu init\uuuuuu.py:127:在导入模块中 return _bootstrap._gcd_import(名称[级别:],包,级别) 函数\测试\测试\活动。py:4:in 导入工作项ID E ModuleNotFoundError:没有名为“ActivityA”的模块 我尝试使用相对路径导入ActivityA模块,但出现了不同的错误

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

有没有一种方法可以让它发挥作用

我复习过类似的问题,但没有一个能给我答案


谢谢

您的tests文件夹中似乎缺少了一个
\uuuu init\uuuuuuuuuuuuuy.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

您是否正在使用
python-mpytest
运行测试?你是从根目录运行它吗?是的,我正在使用该语句运行测试。我将通过创建一个单独的应用程序来尝试。虚拟环境会对pytest的运行方式产生任何影响吗?您的错误与虚拟环境无关,但无论如何,您都应该在自己的环境中运行每个程序。只需创建一个新的venv并将模块添加到根文件夹中,pytest就可以正常运行了。将模块和测试目录移动到名为function的子目录,pytest失败,错误在我的问题中陈述。因此,问题与“function”子目录中的模块和测试有关。