Python unittest: как выполнить только часть тестового файла?

var d = new Date(xiYear, xiMonth, xiDate);
d.setTime( d.getTime() + d.getTimezoneOffset()*60*1000 );

Этот ответ специально разработан для исходного вопроса и не даст того ответа, который вы ожидаете. В частности, некоторые люди захотят вычесть смещение часового пояса, а не добавить его. Помните, однако, что весь смысл этого решения состоит в том, чтобы взломать объект даты в javascript для конкретной десериализации, а не во всех случаях.

69
задан Gohu 1 July 2009 в 09:40
поделиться

3 ответа

По умолчанию unittest.main () использует тестовый загрузчик по умолчанию для создания TestSuite из модуля, в котором работает main.

У вас нет для использования этого поведения по умолчанию.

Вы можете, например, создать три экземпляра unittest.TestSuite .

  1. «быстрое» подмножество.

     fast = TestSuite ()
    fast.addTests (TestFastThis)
    fast.addTests (TestFastThat)
    
  2. «Медленное» подмножество.

     slow = TestSuite ()
    slow.addTests (TestSlowAnother)
    slow.addTests (TestSlowSomeMore)
    
  3. «Весь» набор.

     alltests = unittest.TestSuite ([быстро, медленно])
    

Обратите внимание, что я скорректировал имена TestCase, чтобы они указывали на быстрое и медленное. Вы можете создать подкласс unittest.TestLoader для анализа имен классов и создания нескольких загрузчиков.

Затем ваша основная программа может анализировать аргументы командной строки с помощью optparse или argparse (доступно с 2.7 или 3.2) чтобы выбрать, какой набор программ вы хотите запустить, быстро, медленно или все.

Или вы можете доверять sys.argv [1] - одно из трех значений и использовать что-нибудь столь же простое, как это

if __name__ == "__main__":
    suite = eval(sys.argv[1])  # Be careful with this line!
    unittest.TextTestRunner().run(suite)
]
50
ответ дан 24 November 2019 в 13:42
поделиться

У вас есть два основных способа сделать это:

  1. Определите собственный набор тестов для класса
  2. Создайте фиктивные классы кластерного соединения, которые будут возвращать фактические данные.

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

Вернувшись к варианту (1), вы можете продолжить следующим образом:

suite = unittest.TestSuite()
suite.addTest(MyUnitTestClass('quickRunningTest'))
suite.addTest(MyUnitTestClass('otherTest'))

а затем передать набор в исполнитель тестов:

unittest.TextTestRunner().run(suite)

Дополнительная информация о документации Python: http://docs.python.org/library/unittest.html#testsuite-objects

8
ответ дан 24 November 2019 в 13:42
поделиться

Попробуйте использовать специальный тестер, например py.test, нос или, возможно, даже zope.testing. Все они имеют параметры командной строки для выбора тестов.

Посмотрите, например, как Nose: https://pypi.python.org/pypi/nose/1.3.0

1
ответ дан 24 November 2019 в 13:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: