Проблема запускает тестовый набор юнит-тестов OO

1

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

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 не может найти набор атрибутов, но если я удалю класс, он будет работать. Я запускаю это как script и вызываю переменные в тесте. Я не хочу запускать тесты с помощью os.system('python tests.py'). Я надеялся вызвать тесты через класс, который у меня есть как любая другая функция

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

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

  • 1
    -1: Пожалуйста, не переписывайте код, который вы опубликовали. Закройте вопрос и опубликуйте новый вопрос с совершенно новым кодом.
  • 0
    @everyone - Получил это работает в следующем вопросе.
Теги:
class
unit-testing

2 ответа

3
Лучший ответ

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

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

nosetests module.submodule

или

nosetests module.submodule:TestCase.test_method

бесценен:)

1

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

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() )

Что-то вроде этого будет ближе к правилу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню