在使用pytest时如何在Python项目中导入

0 投票
2 回答
43 浏览
提问于 2025-04-13 01:31

我正在尝试给一个项目添加一些单元测试,但项目里的导入功能不太好使。

项目的结构如下:

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中的函数时,如果加了点就会报导入错误)
  • 尝试使用pytestpy -m pytestunittestpy -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,这个方法可能会解决你的问题。就是设置“源文件根目录”。

  1. 右键点击你的src文件夹。
  2. 选择最后一个选项“标记目录为”。
  3. 然后选择“源文件根目录”。

设置你的源文件根目录

希望这能帮到你。如果有效的话告诉我哦。

撰写回答