Выполнить юнит-тест в классе

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') # This is the name of the file
        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') 

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

class TestInternalSanity(unittest.TestCase):

    def setUp(self):

        setUp script ....

    def tearDown(self):

        script .... 

class BasicInternalSanity(TestInternalSanity):

    def runTest(self):

        test script ....

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) 

Если у меня def suite() внутри class SmokeTests выполняется script, но тесты не выполняются, но если я удалю класс, запускаемые тесты. Я запускаю это как script и вызываю переменные в тесте. Я не хочу запускать тесты с помощью os.system('python tests.py'). Я надеялся вызвать тесты через класс, который у меня есть как любая другая функция. Это нужно вызывать из класса как script, из которого я его вызываю, является Object Oriented. Если кто-то может получить код, который будет запускаться с помощью Call Tests, я был бы признателен за него.

Эта работа:

def suite(): #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') 

Это не работает:

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

Я не могу заставить это работать в классе, может ли кто-нибудь увидеть решение.

Спасибо

  • 0
    Пожалуйста, предоставьте рабочий исходный код. Это явно неправильно вставлено в копию (обратите внимание на неправильный отступ). Если вы удалите SmokeTests.suite (), он не будет работать вообще.
  • 0
    Почему ты снова задаешь этот вопрос? stackoverflow.com/questions/2606515/...
Показать ещё 1 комментарий
Теги:
class
unit-testing
oop
automated-tests

2 ответа

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

Сработало, извините за то, что тратило все время, ответ заключался в изменении имени теста по умолчанию.

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__':
    Smoke = SmokeTests()  
    unittest.main(defaultTest='Smoke.suite') 

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

1

Похоже, вы делаете unittests намного сложнее, чем на самом деле. Возможно, ваша реализация должна выглядеть примерно так:

import unittest

class MyClass(object):

    def add(self, val, other):
        return val + other

    def subtract(self, val, other):
        return val - other


class TestClass(unittest.TestCase):

    def test_add(self):
        myclass = MyClass()
        self.assert_(myclass.add(1, 2) == 3)

    def test_subtract(self):
        myclass = MyClass()
        self.assert_(myclass.subtract(2, 1) == 1)


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

Ещё вопросы

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