unittest макет, как издеваться над вызываемым методом - PullRequest
0 голосов
/ 05 февраля 2020

Я хочу проверить этот метод a вызывает метод b. Эти методы находятся в отдельных файлах и не являются частью объекта класса.

# file_a.py
from file_b import b

def a():
    b()
# file_b.py
def b():
    test
import unittest
from unittest import mock

from file_a import a

class MyTestCase(unittest.TestCase):
    @mock.patch('file_b.b')
    def test_b_called(self, mock):
        a()
        mock.assert_called()

if __name__ == "__main__":
    unittest.main()

Сбой при AssertionError: Expected 'b' to have been called.

Есть ли правильный способ сделать это?

1 Ответ

1 голос
/ 06 февраля 2020

Когда вы импортируете функцию в текущее пространство имен, как в вашем примере, функция должна быть пропатчена в этом пространстве имен. В вашем случае вам нужно:

@mock.patch('file_a.b')

Вы бы исправили file_b.b, если бы вы сделали импорт и использовали вот так:

import file_b
def a():
    file_b.b()
...