2013-06-27 1 views
58

Я хотел бы добавить пару вещей к тому, что класс unittest.TestCase делает при инициализации, но я не могу понять, как это сделать.__init__ для unittest.TestCase

Прямо сейчас я делаю:

#filename test.py 

class TestingClass(unittest.TestCase): 

    def __init__(self): 
     self.gen_stubs() 

    def gen_stubs(self): 
     # Create a couple of tempfiles/dirs etc etc. 
     self.tempdir = tempfile.mkdtemp() 
     # more stuff here 

Я хотел бы все пни, чтобы быть сгенерированы только один раз для всего этого набора тестов. Я не могу использовать setUpClass(), потому что я работаю над Python 2.4 (я не смог получить то, что работает на python 2.7, но ...)

Что я здесь делаю неправильно?

я получаю TypeError: __init__() takes 1 argument (2 given)

и другие ошибки, когда я двигаюсь весь код заглушки в __init__, когда я запускаю его с python -m unittest -v test

+0

@Neeraj Я думаю, что мой вопрос заранее, что один? – ffledgling

+0

@Abhijeet Этот вопрос задан в 2013 году, тот, с которым вы ссылались, был запрошен в 2016 году, и у него меньше ответов и дискурсов, может быть, вы должны пометить другой вопрос как дубликат вместо этого? Ответ там связан с Python 3, и этот вопрос говорит о Python 2. – ffledgling

+0

жаль, что я плохой. – Abhijeet

ответ

87

Попробуйте это:

class TestingClass(unittest.TestCase): 

    def __init__(self, *args, **kwargs): 
     super(TestingClass, self).__init__(*args, **kwargs) 
     self.gen_stubs() 

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

+0

+1 Я бы инициализировал базовый класс до вызова любого метода объекта. –

+0

Это не работает для меня. Материал внутри gen_stub не выполняется. Infact выглядит так, как gen_stub вообще не вызывается ... Я могу сказать, потому что self.tempdir, который должен существовать, не может быть доступен другими методами класса. Я получаю объект AttributeError: объект TestingClass не имеет атрибута 'tempdir' – ffledgling

+0

, что заставляет вас так думать? Можете ли вы поставить точку перерыва или заявление печати и посмотреть? – karthikr

3

Установите unittest2 и используйте этот пакет unittest.

import unittest2 

, а затем использовать setupModule/tearDownModule или setupClass/класс Teardown для специальной логики инициализации

Подробнее: http://www.voidspace.org.uk/python/articles/unittest2.shtml

Кроме того, скорее всего, ваш создаете тест интеграции больше, чем UnitTest. Выберите хорошее имя для тестов, чтобы отличить их или положить в другой контейнерный модуль.

+0

Спасибо за ссылку на документацию. – Chris