Python, unit test – передать аргументы командной строки setUp unittest.TestCase

У меня есть сценарий, который действует как обертка для некоторых модульных тестов, написанных с использованием модуля unittest Python. Помимо очистки некоторых файлов, создания потока вывода и создания некоторого кода, он загружает тестовые примеры в набор, используя

 unittest.TestLoader().loadTestsFromTestCase() 

Я уже использую optparse чтобы вытащить несколько аргументов командной строки, используемых для определения местоположения вывода, как восстановить код, и выполнить некоторую очистку. Я также хочу передать конфигурационную переменную, а именно URI конечной точки, для использования в тестовых случаях.

Я понимаю, что могу добавить OptionParser к методу setUp для TestCase, но я хочу вместо этого передать параметр setUp . Возможно ли использование loadTestsFromTestCase() ? Я могу выполнять итерацию по возвращаемым TestSuite TestCases , но могу ли я вручную вызвать setUp в TestCases ?

** EDIT ** Я хотел указать, что я могу передать аргументы setUp если я перебираю тесты и вызываю setUp вручную, например:

 (options, args) = op.parse_args() suite = unittest.TestLoader().loadTestsFromTestCase(MyTests.TestSOAPFunctions) for test in suite: test.setUp(options.soap_uri) 

Тем не менее, я использую xmlrunner для этого, и его метод запуска принимает TestSuite в качестве аргумента. Я предполагаю, что он будет запускать метод setUp, поэтому мне нужны параметры, доступные в XMLTestRunner .

Я надеюсь в этом есть смысл.

  • assertEquals против assertEqual в python
  • Django 1.6, Transaction.commit_on_success с Multiprocessing не работает
  • Как выполнить код только при ошибках тестирования с помощью python unittest2?
  • Тестирование загрузки файлов с помощью Flask и Python 3
  • Могу ли я подделывать / издеваться над типом моих макетных объектов в python unittests
  • Запуск конкретного тестового примера в Django, когда ваше приложение имеет каталог тестов
  • Получение unittest Python приводит к методу tearDown ()
  • Как создать таблицу во время тестов Django с помощью managed = False
  • 4 Solutions collect form web for “Python, unit test – передать аргументы командной строки setUp unittest.TestCase”

    Ну, я хочу сделать то же самое и сам задался этим вопросом. Я хотел улучшить следующий код, потому что он имеет дублирование. Это позволяет мне отправлять аргументы для тестирования TestCase:

     import unittest import helpspot class TestHelpSpot(unittest.TestCase): "A few simple tests for HelpSpot" def __init__(self, testname, path, user, pword): super(TestHelpSpot, self).__init__(testname) self.hs = helpspot.HelpSpot(path, user, pword) def test_version(self): a = self.hs.version() b = self.hs.private_version() self.assertEqual(a, b) def test_get_with_param(self): a = self.hs.filter_get(xFilter=1) def test_unknown_method(self): self.assertRaises(helpspot.HelpSpotError, self.hs.private_wuggienorple) if __name__ == '__main__': import sys user = sys.argv[1] pword = sys.argv[2] path = sys.argv[3] test_loader = unittest.TestLoader() test_names = test_loader.getTestCaseNames(TestHelpSpot) suite = unittest.TestSuite() for test_name in test_names: suite.addTest(TestHelpSpot(test_name, path, user, pword)) result = unittest.TextTestRunner().run(suite) sys.exit(not result.wasSuccessful()) 
     if __name__ == '__main__': from optparse import OptionParser parser = OptionParser() parser.add_option("-z", "--zebra", action="store_true", dest="zebra", default=False, help="run like a zebra") (options, args) = parser.parse_args() if options.zebra: zebrafy() # remove our args because we don't want to send them to unittest for x in sum([h._long_opts+h._short_opts for h in parser.option_list],[]): if x in sys.argv: sys.argv.remove(x) unittest.main() 

    Я бы определенно советовал не передавать аргументы setUp, как это; setUp предназначен для вызова неявно при запуске теста, поэтому вы не должны явно его вызывать так.

    Одним из способов решения этой проблемы было бы установить значения, которые необходимо установить как переменные среды или значения в глобально доступном «контексте» модуле, который позволит тестовым случаям обращаться к ним по мере необходимости. Я хотел бы использовать переменные среды, поскольку он более гибкий с точки зрения запуска тестов (вы больше не полагаетесь на аргументы командной строки).

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

     import unittest import helpspot class TestHelpSpot(unittest.TestCase): "A few simple tests for HelpSpot" def __init__(self, testname, path, user, pword): super(TestHelpSpot, self).__init__(testname) self.path = path self.user = user self.pword = pword .... .... .... if __name__ == '__main__': True suite = unittest.TestSuite() suite.addTest(TestHelpSpot("test_version", path, user, pword)) unittest.TextTestRunner().run(suite) 
    Python - лучший язык программирования в мире.