Я тестирую сложную логику, которая требует объединения центральной таблицы фактов с 10-20 таблицами меньшего размера. Я хочу издеваться над этими 10-20 таблицами меньшего размера.
Как исправить методы, возвращающие значения в цикле for? См. код ниже.
tables.py:
class BaseClass(object):
def load(path: str):
...
class SmallTable1(BaseClass):
def load():
super().load(self.path)
class SmallTable20(BaseClass):
def load():
super().load(self.path)
test_logic.py
# QUESTION - how to make it work
def test_not_work(datasets):
for i in range(1, 21):
table = 'SmallTable' + str(i)
with mock.patch('some_package.tables.{}.load'.format(table)) as load_mock:
load_mock.return_value = datasets[table]
do_joins() # here my mocks doesn't work
def test_works(datasets):
with mock.patch('some_package.tables.SmallTable1.load'.format(i)) as load_mock_1:
load_mock_1.return_value = datasets[SmallTable1]
with mock.patch('some_package.tables.SmallTable2.load'.format(i)) as load_mock_2:
load_mock_2.return_value = datasets[SmallTable2]
..... # repeat the same 8-18 times more
do_joins() # here my mocks do work, but with cumbersome code and huge right offset
P.S. в качестве альтернативы я могу попытаться издеваться над BaseClass.load
, но тогда я не знаю, как вернуть другой набор данных для другой таблицы (класса).