gpt4 book ai didi

Python 的 mock.patch 没有在单元测试中修补类

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:36 26 4
gpt4 key购买 nike

我对在我的 python 单元测试中使用 Mock 感到困惑。我做了这个问题的简化版本:

我有这个虚拟类和方法:

# app/project.py

class MyClass(object):

def method_a(self):
print(FetcherA)
results = FetcherA()

哪个正在使用这个类:

# app/fetch.py

class FetcherA(object):
pass

然后这个测试:

# app/tests/test.py

from mock import patch
from django.test import TestCase
from ..project import MyClass

class MyTestCase(TestCase):

@patch('app.fetch.FetcherA')
def test_method_a(self, test_class):
MyClass().method_a()
test_class.assert_called_once_with()

我希望运行这个测试会通过并且 print语句,用于调试,会输出类似 <MagicMock name=...> 的内容.相反,它打印出 <class 'app.fetch.FetcherA'>我得到:

AssertionError: Expected to be called once. Called 0 times.

为什么不是 FetcherA正在打补丁?

最佳答案

好的,第四次我想我理解了 'Where to patch'模拟文档部分。

所以,而不是:

    @patch('app.fetch.FetcherA')

我应该使用:

    @patch('app.project.FetcherA')

因为我们正在测试 app.project.MyClass 中的代码,其中已经导入了 FetcherA。所以此时 FetcherAapp.project 中全局可用(?)。

关于Python 的 mock.patch 没有在单元测试中修补类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32056196/

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