簡體   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