Python - патчирование модуля? - PullRequest
0 голосов
/ 02 ноября 2019

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

В качестве упрощенного примера скажем, у меня есть такая структура проекта:

Dir Structure

В папке Adders у меня есть класс AddFour и модуль Util, которые выглядят следующим образом, вы присваиваете AddFour значение, и оно добавляет четыре к нему из giveFour метода

# Util.py
def giveFour():
    return 4

#AddFour.py
from Adders.Util import giveFour

class AddFour:

def add(self, value):
    return value + giveFour()    

Затем у меня есть тест, в котором для примера я пытаюсь исправить функцию giveFour, чтобы вместо этого вернуть 5

Я прочел кое-что, и общее предложение - это исправление, где объектпосмотрел вверх, но я не могу понять это правильно

import unittest
from unittest.mock import patch
from Adders.AddFour import AddFour

class AddFour_Tests(unittest.TestCase):

    @patch('Adders.AddFour.giveFour')
    def give_five(mock_give):
        mock_give.return_value = 5


    def test_add_four(self):
        test_class = AddFour() # Should now add 5?
        result = test_class.add(5)
        self.assertEqual(result, 10)

Если это возможно, кто-нибудь может указать мне правильное направление? Я чувствую, что упускаю что-то действительно очевидное

1 Ответ

0 голосов
/ 03 ноября 2019

Ваш код должен быть:

class AddFour_Tests(unittest.TestCase):

    @patch('adders.AddFour.giveFour')
    def test_addfour(self, give_four):
        give_four.return_value = 5 
        add4 = AddFour()
        result = add4.add(5)
        self.assertEqual(result, 10) 

Вы хотите украсить тестовый метод, где вызывается ваша макетная функция, потому что макет активен только в этом методе.

...