Вы достигли точки, когда вам нужно использовать инфраструктуру модульного тестирования, чтобы делать то, что вы хотите, без необходимости писать код для настройки и разрушения.
Я буду считать,вы используете модуль Python unittest
, в противном случае, если у вас его нет, он почти наверняка имеет то, что я собираюсь вам показать (а если нет, то, вероятно, его не стоит использовать, и выследует переключиться на что-то лучшее).
Согласно документам , вы можете добавить метод с именем setUp()
, в результате чего:
... тестированиеFramework будет автоматически вызывать каждый тест, который мы запускаем.
import unittest
class YourTestClass(unittest.TestCase):
def setUp(self):
# Call code here to be set up
# Save the things into fields with self.whatever = calculate(...)
def someTest(self):
# Make use of self.whatever that your automatically run setUp()
# has provided for you, since the unit testing framework has
# called it before this test is run
Кроме того, есть tearDown()
, если вам это нужно, который запускает код после каждого модульного теста.
Это означает, чтокогда вы реализуете setUp
(и, необязательно, tearDown
), он будет работать так:
test_class1.setUp()
test_class1.test_case1
test_class1.tearDown()
test_class1.setUp()
test_class1.test_case2
test_class1.tearDown()
test_class1.setUp()
test_class1.test_case3
test_class1.tearDown()
...
Также вы можете сделать гораздо больше, для этого я рекомендую ознакомиться с документацией.Однако это должно делать то, что вы хотите, основываясь на комментариях, которые вы мне предоставили.
Теперь, если у вас есть код, которым они делятся (например, некоторые небольшие изменения параметров), вы должны исследовать Отличительные особенностиПротестируйте итерации, используя раздел подтестов по предоставленной ссылке, чтобы узнать, как использовать subTest()
, чтобы справиться с этим для вас.Предположительно, для этого требуется Python 3.4+ (который, я надеюсь, вы используете, а не что-то архаичное, как 2.7).
Наконец, если вы хотите просто запустить что-то один раз перед всеми тестами, вы можете использовать setUpClass()
, который будетсделать то же самое, что и setUp()
, за исключением того, что он запускается один раз.См. Документы для получения более подробной информации.
Вкратце:
Используйте setUp()
, если вам нужно что-то делать перед каждым тестом
Используйте setUpClass()
, если вам нужно сделать что-то один раз перед всеми тестами
Просмотрите subTest()
, если у вас есть много похожих тестов и только те данные, которые вывнести изменения в тесты, но это только для того, чтобы сделать ваш код чище