2009-11-04 1 views
4

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

, как я:

import unittest 

class mrp_repair_test_case(unittest.TestCase): 

    def __init__(self, a=None, b=None, methodName=['runTest']): 
      unittest.TestCase.__init__(self) 
      self.a= a 
       self.b = b 

    def test1(self): 
      .......... 
      ....... 

def runtest() 
    mrp_repair_test_case(a=10,b=20) 
    suite = unittest.TestLoader().loadTestsFromTestCase(mrp_repair_test_case) 
    res = unittest.TextTestRunner(stream=out,verbosity=2).run(suite) 

как я могу acvhieve это: Я получаю эта ошибка:

ValueError: no such test method in ****<class 'mrp_repair.unit_test.test.mrp_repair_test_case'>:**** runTest 

благодаря

ответ

6

На первый взгляд, это выглядит например, вам нужно создать экземпляр mrp_repair_test_case. Ваша текущая строка:

mrp_repair_test_case(a=10,b=20) 

на самом деле ничего не делает.

Try (не проверено):

def runtest(): 
    m = mrp_repair_test_case(a=10, b=20) 
    suite = unittest.TestLoader().loadsTestsFromTestCase(m) 
    res = unittest.TextTestRunner(stream=out, verbosity=2).run(suite) 

Это предполагает, что вы создали 'из', как поток уже.

Edit:

Кстати, есть какой-либо причине вы не используете метод установки, чтобы установить эти значения? Это была бы нормальная передовая практика. Рассматривая документацию loadTestsFromTestCase, похоже, что он будет принимать только сам класс, а не экземпляр его, что означает, что вы скорее работаете с дизайном модуля unittest.

Edit 2:

В ответ на вашу дальнейшую информацию, я бы на самом деле установить ваши UID и курсоров значения отдельно на уровне модуля перед вызовом тестов. Обычно я не большой поклонник глобалов, но если я правильно понимаю, эти значения будут A) только для чтения B) всегда одинаковы для одного и того же клиента, что позволяет избежать большинства обычных ошибок при их использовании.

Edit 3:

Чтобы ответить на ваши изменения, если вы действительно хотите использовать __init__ вы, вероятно, можете, но вам придется свернуть свой собственный альтернативный loadsTestsFromTestCase, и, возможно, собственный TestSuite (вы должны проверить внутренности того, как это работает). Как я уже сказал выше, вы будете работать против существующего дизайна модуля - насколько это возможно, если вы решите провести свое тестирование таким образом, вам будет проще свернуть свое собственное решение с нуля, чем использовать unittest. Amend: только что проверили, вам определенно придется свернуть собственную версию TestSuite, поскольку существующий создает новый экземпляр TestCaseClass для каждого теста.

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