Попытка реализовать Python TestSuite

У меня есть два тестовых примера (два разных файла), которые я хочу запустить вместе в наборе тестов. Я могу запустить тесты, просто запустив python «в обычном режиме», но когда я выбираю запуск модульного теста python, он говорит, что запущено 0 тестов. Сейчас я просто пытаюсь заставить хотя бы один тест работать правильно.

import usertest
import configtest # first test
import unittest   # second test

testSuite = unittest.TestSuite()
testResult = unittest.TestResult()
confTest = configtest.ConfigTestCase()
testSuite.addTest(configtest.suite())
test = testSuite.run(testResult)
print testResult.testsRun # prints 1 if run "normally"

Вот пример настройки моего тестового примера

class ConfigTestCase(unittest.TestCase):
    def setUp(self):

        ##set up code

    def runTest(self):

        #runs test


def suite():
    """
        Gather all the tests from this module in a test suite.
    """
    test_suite = unittest.TestSuite()
    test_suite.addTest(unittest.makeSuite(ConfigTestCase))
    return test_suite

if __name__ == "__main__":
    #So you can run tests from this module individually.
    unittest.main()

Что мне нужно сделать, чтобы получить эту работу правильно?


person avoliva    schedule 17.08.2012    source источник


Ответы (4)


вы хотите использовать тестовый костюм. Поэтому вам не нужно вызывать unittest.main(). Использование testsuit должно быть таким:

#import usertest
#import configtest # first test
import unittest   # second test

class ConfigTestCase(unittest.TestCase):
    def setUp(self):
        print 'stp'
        ##set up code

    def runTest(self):
        #runs test
        print 'stp'

def suite():
    """
        Gather all the tests from this module in a test suite.
    """
    test_suite = unittest.TestSuite()
    test_suite.addTest(unittest.makeSuite(ConfigTestCase))
    return test_suite

mySuit=suite()

runner=unittest.TextTestRunner()
runner.run(mySuit)
person dileep nandanam    schedule 17.08.2012
comment
Спасибо, спасибо отлично сработало для того, что мне было нужно. Огромное спасибо! - person avoliva; 17.08.2012
comment
Большое спасибо за этот ответ. С какой стати мне нужно вызывать unittest.makeSuite, чтобы добавить тест в существующий набор? - person timgeb; 22.03.2016
comment
В комментариях это Gather или Gathers? - person Olivier Pons; 22.11.2018
comment
@OlivierPons собирает. Советует тестировщику - person dileep nandanam; 20.12.2018
comment
Хорошо, я подумал Собрать все тесты из этого модуля в набор тестов. означает, что эта функция собирает все тесты из этого модуля в набор тестов. (Вот почему я подумал, что нужно добавить s, но я очень плохо говорю по-английски, извините) - person Olivier Pons; 21.12.2018

Весь код для создания загрузчика и комплекта не нужен. Вы должны писать свои тесты так, чтобы их можно было запускать с помощью обнаружения тестов с помощью вашего любимого средства запуска тестов. Это просто означает называть ваши методы стандартным способом, помещать их в импортируемое место (или передавать папку, содержащую их, бегуну) и наследовать от unittest.TestCase. После того, как вы это сделаете, вы можете использовать python -m unittest discover в самом простом случае или более удобный сторонний бегун, чтобы обнаружить и затем запустить свои тесты.

person Julian    schedule 17.08.2012

Если вы пытаетесь вручную собрать TestCase, это полезно: unittest.loader.findTestCases():

# Given a module, M, with tests:
mySuite = unittest.loader.findTestCases(M)
runner = unittest.TextTestRunner()
runner.run(mySuit)
person Ben    schedule 25.11.2013

Я предполагаю, что вы имеете в виду запуск модульного теста python для модуля, который объединяет два теста. Это будет работать, если вы создадите тестовый пример для этого модуля, т.е. создание подкласса unittest.TestCase и наличие простого теста, который начинается со слова «тест».

e.g.

class testall(unittest.TestCase):

    def test_all(self):           
        testSuite = unittest.TestSuite()
        testResult = unittest.TestResult()
        confTest = configtest.ConfigTestCase()
        testSuite.addTest(configtest.suite())
        test = testSuite.run(testResult)
        print testResult.testsRun # prints 1 if run "normally"

if __name__ == "__main__": 
      unittest.main()
person Cheng    schedule 17.08.2012