gpt4 book ai didi

Python 单元测试模拟不正确

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:15 25 4
gpt4 key购买 nike

我是 Python 单元测试的新手。我试图为我的类(class)编写单元测试。但是我遇到了问题:

from <path1> import InnerObj
from <path2> import new_obj
from <path3> import XYZ

class ClassToBeTested(object):

def __init__(self):
obj = new_obj(param1 = "XYZ", time = 1, innerObj = InnerObj())
self.attr1 = XYZ(obj)


def method(self, random, paramStr):

// Remainder of class

测试类:

from mock import patch, PropertyMock, MagicMock
from <path1> import InnerObj
from <path2> import new_obj
from <path3> import XYZ


@pytest.fixture()
@patch('<path1>.InnerObj', new=MagicMock())
@patch('<path2>.new_obj', new=MagicMock())
@patch('<path3>.XYZ', new=MagicMock())
def mock_test():
return ClassToBeTested()

def test_method_true(mock_test):
random = Random_Object()

booleanResult = mock_test.method(random, paramStr)
assert booleanResult == True

我得到的错误是设置 test_method_true ______ 时出错

错误堆栈提到 innerObj/init.py:26:在 init 中 qwerty_main = qwerty_assistant.get_root()

我可能认为 InnerObj 的模拟没有正确完成,因为它不应该调用模拟对象的 init 方法中的代码。

我在这里做错了什么吗?有人可以帮忙指出正确的方向吗?

谢谢

最佳答案

patch应针对正在使用的导入,而不是导入的路径。

例如

@patch('<path1>.InnerObj', new=MagicMock())

<path1>InnerObj 定义的位置而不是使用它的文件。为了解决这个问题,InnerObj导入应该在导入 InnerObj 的模块中进行修补

假设 ClassToBeTested 的路径是 path.to.class.to.be.tested

补丁将是:

@patch('path.to.class.to.be.tested.InnerObj', new=MagicMock())

关于Python 单元测试模拟不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39175756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com