繁体   English   中英

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

[英]Python's mock.patch not patching class in unittest

我在 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没有被打补丁?

好的,第四次我想我理解了 Mock 文档的“在哪里打补丁”部分。

所以,而不是:

    @patch('app.fetch.FetcherA')

我应该使用:

    @patch('app.project.FetcherA')

因为我们正在测试的代码app.project.MyClass其中FetcherA已经被导入。 所以在这一点上FetcherA是有效地在全球范围(?)内app.project

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM