首页 > 解决方案 > 使用 @patch 注释时模块没有被嘲笑

问题描述

这是我的项目目录结构

project 
   |
   |---------src
   |          |---------__init__.py
   |          |---------main.py
   |          |---------tools
   |                      |------__init__.py
   |                      |------tool_a
   |                      
   |                      
   |--------tests
              |
              |---------__init__.py
              |---------test_fun.py
              

这是我正在尝试编写的一个简单测试,但它似乎无法使用 @patch 注释进行模拟

#main.py
import os
import sys

sys.path.insert(1, os.path.join(sys.path[0], '..'))
from src.tools.tool_a import fun


def main_fun():
    return fun()
#tool_a.py

def fun():
    return 10
#test_fun.py

import os
import sys

from unittest.mock import patch
from src.main import main_fun


@patch('src.tools.tool_a.fun')
def test_main_fun(mock_fun):
    mock_fun.return_value = 1
    assert 1 == main_fun()
    mock_fun.assert_called()

我认为这是目录的结构方式,因为如果我两者都tool_a.pymain.py同一个目录中,那么测试可以工作,但在这个设置中似乎不起作用。

标签: pythonpytestpython-unittest

解决方案


推荐阅读