У меня есть набор для тестирования дыма. У меня есть все мои 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')
Я не могу заставить это работать в классе, может ли кто-нибудь увидеть решение.
Спасибо
Сработало, извините за то, что тратило все время, ответ заключался в изменении имени теста по умолчанию.
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')
Спасибо за любую помощь.
Похоже, вы делаете 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()