Проблема запускает тестовый набор юнит-тестов OO - PullRequest
1 голос
/ 09 апреля 2010

У меня есть набор тестов для тестирования дыма. У меня весь сценарий хранится в разных классах, но когда я пытаюсь запустить набор тестов, я не могу заставить его работать, если он в классе. Код ниже: (класс для вызова тестов)

from alltests import SmokeTests

class CallTests(SmokeTests):

    def integration(self):

        self.suite()

if __name__ == '__main__':
    run = CallTests()
    run.integration()

И набор тестов:

class SmokeTests():

    def suite(self): #Function stores all the modules to be tested 
        modules_to_test = ('external_sanity', 'internal_sanity')
        alltests = unittest.TestSuite()
        for module in map(__import__, modules_to_test):
            alltests.addTest(unittest.findTestCases(module))
        return alltests
if __name__ == '__main__':
    unittest.main(defaultTest='suite')

Этот вывод является ошибкой: Ошибка атрибута: у объекта 'module' нет атрибута 'suite'

Итак, я вижу, как вызывать определенную обычную функцию, но мне трудно вызывать ее в комплекте. В одном из тестов комплект настроен так:

class InternalSanityTestSuite(unittest.TestSuite):

# Tests to be tested by test suite
def makeInternalSanityTestSuite():
    suite = unittest.TestSuite()
    suite.addTest(TestInternalSanity("BasicInternalSanity"))
    suite.addTest(TestInternalSanity("VerifyInternalSanityTestFail"))
    return suite

def suite():
    return unittest.makeSuite(TestInternalSanity)

Если у меня есть someSuite () внутри класса SmokeTests, python не может найти набор атрибутов, но если я удаляю класс, он работает. Я запускаю это как скрипт и вызываю переменные в тестах. Я не хочу запускать тесты с помощью os.system ('python tests.py'). Я надеялся вызвать тесты через класс, который у меня есть, как и любая другая функция

Может кто-нибудь помочь мне с этим запустить?

Спасибо за любую помощь заранее.

Ответы [ 2 ]

3 голосов
/ 09 апреля 2010

Я знаю, что это не ответ, но я бы посоветовал использовать библиотеку, которая может использовать обнаружение тестов, например возможность переноса или проверки юнитов из Python 2.7 +.

Возможность сделать

nosetests module.submodule

или

nosetests module.submodule:TestCase.test_method

бесценно:)

1 голос
/ 09 апреля 2010

Это не может работать:

class SmokeTests():

    def suite(self): #Function stores all the modules to be tested 
        modules_to_test = ('external_sanity', 'internal_sanity')
        alltests = unittest.TestSuite()
        for module in map(__import__, modules_to_test):
            alltests.addTest(unittest.findTestCases(module))
        return alltests

if __name__ == '__main__':
    unittest.main(defaultTest='suite')

Этот вывод является ошибкой: Ошибка атрибута: у объекта 'module' нет атрибута 'suite'.

Ваш набор - значение метода SmokeTests().suite(). Обратите внимание на переменную с именем suite, поскольку у вас нет такой переменной.

Проще использовать простую функцию для вашего набора.

def someSuite():
    modules_to_test
    ...
    return alltests

if __name__ == "__main__":
    unittest.main( defaultTest= someSuite() )

Нечто подобное будет ближе к правильному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...