макет метода, расположенного в __init__.py - PullRequest
0 голосов
/ 31 августа 2018

Я хотел бы смоделировать метод, который находится в init .py, но на самом деле он не работает.

Существует пример, демонстрирующий проблему и то, как я пытался написать модульный тест:

Тестируемый код: 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")

Единица испытания:

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», а не побочный эффект. Кто-нибудь может мне помочь, что я сделал не так?

1 Ответ

0 голосов
/ 31 августа 2018

Имя, которое нужно исправить, не 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()
...