У меня есть 2 сценария, один - класс тестирования, второй - сценарий с функциями, которые я хочу проверить.
В сценарии, который я хочу проверить, есть много функций, которые используют глобальные переменные - эти переменные инициализируются в операторе if __name__ == '__main__':
функцией с именем init_params()
- инициализируют около 7 переменных. Пока здесь все хорошо. При вызове первой функции main()
, которая вызывает другие функции, которая также вызывает другие функции последовательно, они используют эти инициализированные параметры из if __name__ == '__main__':
, и они НЕ передаются в качестве параметров этим функциям - это означает, что они все еще видны всем функций в сценарии, не передавая их.
Проблема возникает, когда я пытаюсь протестировать эту функцию main()
, при этом она выдает, что инициализированные переменные не объявлены. Затем я приступил к выполнению init_params()
внутри функции main()
, но они по-прежнему не распознаются, также попытался инициализировать его в тестовом классе, но ничего не помогло. Единственное, что я могу думать о том, что это сработает, - это передать все эти 7 переменных каждой функции в скрипте, что похоже на 3-4 функции, я могу это сделать, и это будет работать наверняка - но это ужасно. И я уверен, что есть другой способ сделать это. Любые идеи, как сделать это менее уродливым , чем моя идея?
Любая помощь высоко ценится!
import unittest
from script_i_want_to_test import main, init_params
class TestMul(unittest.TestCase):
def test_list_int(self):
"""
bla bla bla
"""
img_path_fldr = 'path/that/main/needs/as/argument'
valid_images, total_images = main(img_path_fldr)
mul = valid_images * total_images
self.assertEqual(mul, 3)
if __name__ == '__main__':
unittest.main()
## the script i want to test
def function1():
#bla bla bla..
function2()
## bla bla bla
def function2():
# shouts an error here because for example var2 isn't declared
def main(img_path_fldr):
var1, var2, ..., var7 = init_params(img_path_fldr)
function1()
return bla1, bla2