Test Suite unittest

1

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

import unittest

def suite():
    modules_to_test = ('TestAbsoluteMove', 'TestContinuousMove') # and so on
    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 AbsoluteMoveTestSuite(unittest.TestSuite):

def makeAbsoluteMoveTestSuite():
    suite = unittest.TestSuite()
    suite.addTest(TestAbsoluteMove("BasicAbsolutePan"))
    suite.addTest(TestAbsoluteMove("VerifyAbsolutePan"))
    suite.addTest(TestAbsoluteMove("VerifyAbsoluteTilt"))
    suite.addTest(TestAbsoluteMove("VerifyAbsolutePanSpeed"))
    suite.addTest(TestAbsoluteMove("VerifyAbsoluteTiltSpeed"))
    return suite

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

Выпущенная ошибка утверждает, что нет модулей с именем TestAbsoluteMove и TestContinuousMove. Кто-нибудь знает, как заставить этот код работать?

Спасибо

Теги:
unit-testing
testing
test-suite

4 ответа

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

Nose делает такую ​​вещь без проблем. Он будет автоматически определять ваши тесты и запускать их как набор. (Вы также можете запустить определенные тесты, передав ему флаг.)

  • 4
    Я не думаю, что добавление дополнительной зависимости является правильным ответом на этот вопрос.
2

вот как я создаю свой testuite (loadTestFromTestCase автоматически обнаруживает ваши тесты)

def suite():
    """ returns all the testcases in this module """
    return TestLoader().loadTestsFromTestCase(AbsoluteMoveTestSuite)

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

import sys
import unittest

import test.framework.asyncprocess as a
import test.framework.easyconfig as e
import test.framework.modulegenerator as mg
import test.framework.modules as m
import test.framework.filetools as f
import test.framework.repository as r
import test.framework.robot as robot
import test.framework.easyblock as b
import test.framework.variables as v
import test.framework.github as g
import test.framework.toolchainvariables as tcv
import test.framework.toolchain as tc
import test.framework.options as o
import test.framework.config as c


# call suite() for each module and then run them all
SUITE = unittest.TestSuite([x.suite() for x in [r, e, mg, m, f, a, robot, b, v, g, tcv, tc, o, c]])

# uses XMLTestRunner if possible, so we can output an XML file that can be supplied to Jenkins
xml_msg = ""
try:
    import xmlrunner  # requires unittest-xml-reporting package
    xml_dir = 'test-reports'
    res = xmlrunner.XMLTestRunner(output=xml_dir, verbosity=1).run(SUITE)
    xml_msg = ", XML output of tests available in %s directory" % xml_dir
except ImportError, err:
    sys.stderr.write("WARNING: xmlrunner module not available, falling back to using unittest...\n\n")
    res = unittest.TextTestRunner().run(SUITE)
  • 0
    xmlrunner.XMLTestRunner (output = xml_dir, verbosity = 1) .run (SUITE) был тем, что я искал
2

TestAbsoluteMove - это класс, и он должен откуда-то исходить. Где бы ни был определен ваш класс AbsoluteMoveTestSuite, вам необходимо импортировать TestAbsoluteMove.

0

unittest - это немного боль, чтобы использовать это. Я бы очень хотел повторить, что вы следите за советом Элисон на nose или используете мой личный любимый инструмент тестирования Python py.test. Просто создайте функции, следуя конкретному соглашению об именах и позвольте ему разорвать! Вся вещь xUnit действительно не вписывается в территорию Python.

Ещё вопросы

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