Я придерживаюсь общей стратегии: если переменная будет использоваться в нескольких тестовых функциях, я определяю ее в setUp()
. Если он будет использоваться только один раз для конкретной функции, определите его в этой функции.
Возьмите следующий пример:
Скажем, у меня есть модуль Python в пакете program
с именем list_utils.py
и в list_utils.py
У меня есть следующие функции:
def list_to_string(mylist):
""" Takes a list of strings and joins them into a single string.
"""
return ' '.join(mylist)
def list_extender(mylist, extend_item):
return mylist.extend(extend_item)
Затем я настроил свой скрипт unittest с указанием mytestlist
, потому что он будет использоваться в нескольких тестовых функциях:
from program import list_utils as lu
class TestListUtils(unittest.TestCase):
"""
A subclass of unittest to test list_utils.py
"""
def setUp(self):
self.mytestlist = ['Hi', 'there']
def test_list_to_string(self):
"""
Ensures my list is converted to string
"""
self.assertTrue(isinstance(lu.list_to_string(self.mytestlist), string))
def test_list_extender(self):
"""
Ensures list is extended when argument is passed.
"""
mylocalvariable = 'Adam'
self.assertTrue(lu.list_extender(self.mytestlist, mylocalvariable)[-1] == 'Adam')
def tearDown(self):
pass
if __name__ == '__main__':
unittest.main()
Вы видите, что для list_extender
я передал mylocalvariable
, потому что я бы использовал его только в области действия этой функции, но mytestlist
был определен в setUp
, потому что я использовал его несколько раз. Следуя этому общему подходу, вы не должны слишком раздувать ваш setUp
, и вам также не придется повторно создавать экземпляры переменных при каждом конкретном тестировании модуля, если они будут использоваться несколько раз.