在使用pytest时如何在Python项目中导入
我正在尝试给一个项目添加一些单元测试,但项目里的导入功能不太好使。
项目的结构如下:
root
| src
| | __init__.py
| | bsp.py
| | helpers.py
| test
| | __init__.py
| | test_helpers.py
这两个init.py都是空的。
bsp.py的内容如下:
class BSP:
# some class stuff
helpers.py的内容如下:
from bsp import BSP
def func(x: BSP) -> BSP:
return x
最后,test_helpers.py的内容如下:
from src.helpers import func
from src.bsp import BSP
from unittest import TestCase
class TestFunc(TestCase):
def test_func(self):
x = BSP()
assert func(x) == x
当我从根目录运行pytest
时,导入功能就不管用了:
File "...\\root\\tests\\test_helpers.py", line 1, in \<module\>
from src.helpers import func
File "...\\root\\src\\helpers.py", line 1, in \<module\>
from bsp import BSP
ModuleNotFoundError: No module named 'bsp'
不过从src目录运行函数是可以的。
我可能做了什么傻事,但我已经找了很久,也不太确定自己哪里出错了 :sweat_smile:
我已经尝试过:
- 在
src/helpers.py
中的from bsp import BSP
前面加上一个点(.);但是这样一来,src里的导入就坏掉了(例如,src/main.py执行helper中的函数时,如果加了点就会报导入错误) - 尝试使用
pytest
、py -m pytest
、unittest
、py -m unittest
- 尝试在根目录添加init.py,并在src/test中添加或删除文件
2 个回答
0
添加;
import os, sys
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
到 src/\_\_init\_\_.py
里,可以让这个功能在包内部运行时和使用pytest测试时都能正常工作。就像在 这里 提到的那样。
0
我最近遇到过类似的问题。如果你在用PyCharm,这个方法可能会解决你的问题。就是设置“源文件根目录”。
- 右键点击你的src文件夹。
- 选择最后一个选项“标记目录为”。
- 然后选择“源文件根目录”。
希望这能帮到你。如果有效的话告诉我哦。