Как я могу применить побочные эффекты в зависимости от экземпляра, который создается в тестируемой функции?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу применить побочные эффекты в зависимости от экземпляра, который создается в тестируемой функции?

Сообщение Anonymous »

У меня есть пользовательский класс в файле myclass.py < /p>
class MyClass:
def__init__(self):
self.fetched_data = False

def get_data(self):
self.fetched_data = True
return [1, 2, 3]
< /code>
I Импорт и используйте этот класс в файле function_to_test.py < /p>
from MyClass import MyClass

def do_data_calculations():
my_class = MyClass()
data = my_class.get_data()
print(data)
print(f"Data fetched: {my_class.fetched_data}")
return True
< /code>
Это код, который я получил, и я не могу его изменить. Я пишу модульные тесты для этого, используя библиотеку Unittest, и, поскольку я не могу выполнить функции get_data должным образом, мне придется издеваться над ними. Для этого у меня есть этот код < /p>
from function_to_test import do_data_calculations
import unittest
from unittest.mock import patch

def get_data_side_effect(self):
self.fetched_data = True
return [10, 9, 8]

@patch('function_to_test.MyClass.get_data')
class TestMyClass(unittest.TestCase):
def test_greet(self, mock_get_data):
mock_get_data.side_effect = get_data_side_effect
do_data_calculations()
self.assertTrue(mock_get_data.called)

if __name__ == "__main__":
unittest.main()
< /code>
Запуск Unittest Я получаю ошибку < /p>
Traceback (most recent call last):
File "C:\Users\user4219\AppData\Local\miniconda3\envs\azure\lib\unittest\mock.py", line 1379, in patched
return func(*newargs, **newkeywargs)
File "c:\Users\user4219\source\projects\mockingtest\test_function.py", line 14, in test_greet
do_data_calculations()
File "c:\Users\user4219\source\projects\mockingtest\function_to_test.py", line 5, in do_data_calculations
data = my_class.get_data()
File "C:\Users\user4219\AppData\Local\miniconda3\envs\azure\lib\unittest\mock.py", line 1114, in call
return self._mock_call(*args, **kwargs)
File "C:\Users\user4219\AppData\Local\miniconda3\envs\azure\lib\unittest\mock.py", line 1118, in _mock_call
return self._execute_mock_call(*args, **kwargs)
File "C:\Users\user4219\AppData\Local\miniconda3\envs\azure\lib\unittest\mock.py", line 1179, in _execute_mock_call
result = effect(*args, **kwargs)
TypeError: get_data_side_effect() missing 1 required positional argument: 'self'
< /code>
Когда я читаю документацию, кажется, что побочный эффект получает параметры, с помощью которых вызывается функция. Но когда я попробую это, это не так. Уровень класса (и я не могу использовать линию New = Callable, так как каждая функция должна вызывать ее с разными параметрами).
Как я могу изменить это, чтобы иметь возможность применять побочные эффекты к экземпляру класса?

Подробнее здесь: https://stackoverflow.com/questions/796 ... ted-in-a-f
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»