Я хотел бы высмеять метод, который находится в init.py, но на самом деле он не работает.
Существует пример, чтобы продемонстрировать проблему и как я попытался написать unit тест:
Проверяемый код: src.main.myfile:
from src.main.utils import a_plus_b
def method_under_test():
a_plus_b()
A_plus_b находится в __init__.py в модуле src.main.utils:
def a_plus_b():
print("a + b")
Unittest:
import src.main.utils
import unittest
from mock import patch
from src.main.myfile import method_under_test
class my_Test(unittest.TestCase):
def a_plus_b_side_effect():
print("a_plus_b_side_effect")
@patch.object(utils, 'a_plus_b')
def test(self, mock_a_plus_b):
mock_a_plus_b.side_effect = self.a_plus_b_side_effect
method_under_test()
Единичный тест печатает "a + b", а не побочный эффект. Может ли кто-нибудь помочь мне в том, что я сделал неправильно?
Имя, которое нужно src.main.utils.a_plus_b
, - это не src.main.utils.a_plus_b
, а src.main.myfile.a_plus_b
, так как это method_under_test
.
@patch('src.main.myfile.a_plus_b')
def test(self, mock_a_plus_b):
mock_a_plus_b.side_effect = self.a_plus_b_side_effect
method_under_test()
src.main.utils.a_plus_b
не может бытьsrc.main.utils.a_plus_b
. Я всегда исправлял оригинальные методы, а не импортированные объекты. Знаете ли вы причину, почему я не могу издеваться надsrc.main.utils.a_plus_b
. другая опция для тестирования a_plus_b, если метод передается как аргумент ключевого слова. `def method_under_test (_a_plus_b = a_plus_b): _a_plus_b ()`import src.main.utils
, а затемsrc.main.utils.a_plus_b
, то полное имя будет правильным для исправления. См. Docs.python.org/3/library/unittest.mock.html#where-to-patch .