2017-02-20 9 views
1

я хотел бы узнать, если ниже идея безопасна для использования в UnitTest. Проблема, которая у меня есть, заключается в том, что я хочу выполнить тот же набор тестов, но с немного другой настройкой. Sudo код для:использования Подкласса для UnitTest в питоне уникального переменных

def reusableTest(var1): 
    # do base test 

class Suite_Finds_Type1(unittest.TestCase, myFinds): 
    @classmethod 
    def setUpClass (self): 
     self.somevar = 'method1' 

class Suite_Finds_Type2(unittest.TestCase, myFinds): 
    @classmethod 
    def setUpClass (self): 
     self.somevar = 'method2' 

class myFinds(): 
    def test_001(self): 
     reusableTest(self.somevar) 

    def test_002(self): 
     reusableTest(self.somevar) 

if __name__=='__main__': 
    unittest.main(argv=sys.argv, testRunner = unittest.TextTestRunner(verbosity=2)) 
+0

я узнал, что этот же метод работает. Лучше тогда ожидалось. – Keith

ответ

0

Нет, это не будет работать; вы определили setUpClass в своих тестовых наборах, так что это будет тот, который будет запущен, а один в myFinds будет проигнорирован.

Кстати, setUpClass должен быть метод класса.

Один из способов исправить это использовать простую иерархию наследования и определить somevar как переменный класса в своих дочерних классах:

class myFinds(unittest.TestCase): 
    @classmethod 
    def setUpClass(cls): 
     # ... 
     pass 

class Suite_Finds_Type1(myFinds): 
    somevar = 'method1' 
+0

- Потрясающе, сегодня я закончу преобразование этого файла и немного поменю. Я знал о декораторе класса (я попытаюсь отредактировать оригинальный код), но забыл его в своем примере кода. Ty ... звучит так, как будто это будет работать, и это хорошо, чтобы создать коллекцию многоразовых тестов. – Keith

0

Если вы используете Python 3.4 или более позднюю версию, рассмотрит использование subtests , Субтесты предоставляют механизм параметризации теста.

Для вашего кода вы могли бы рассмотреть что-то вроде следующего:

def reusableTest(var1): 
    # do base test 

class Suite_Finds(unittest.TestCase): 
    def test_methods(var1): 
     for method in ('method1', 'method2'): 
      with self.subTest(method = method): 
       reusableTest(method) 

Подтесты будет каждый отчет как отдельный тест, но позволяет повторно использовать тестовый код.

+0

OK сделают ... К сожалению, все еще в Python 2.7 – Keith

 Смежные вопросы

  • Нет связанных вопросов^_^