Как мне создать набор тестов в python unittest

#python #python-unittest

#python #python-unittest

Вопрос:

я пытался:

 def buildTestSuite():
    suite = unittest.TestSuite()
    for testcase in glob.glob('src/testsuite/test_*.py'):
        module = os.path.splitext(testcase)[0]
        print module
        print type(module)
        suite.addTest(__import__(module).buildTestSuite())
    return suite
  

но я получаю ошибку:

 Traceback (most recent call last):
  File "runtests.py", line 63, in ?
    results = main()
  File "runtests.py", line 57, in main
    results = unittest.TextTestRunner().run(buildTestSuite())
  File "runtests.py", line 53, in buildTestSuite
    suite.addTest(__import__(module).buildTestSuite())
AttributeError: 'module' object has no attribute 'buildTestSuite'
  

Ответ №1:

 def buildTestSuite():
    suite = unittest.TestSuite()
    for testcase in glob.glob('src/testsuite/test_*.py'):
        modname = os.path.splitext(testcase)[0]
        module=__import__(modname,{},{},['1'])
        suite.addTest(unittest.TestLoader().loadTestsFromModule(module))
    return suite
  

Комментарии:

1. ошибка: трассировка (последний последний вызов): файл «runtests.py «, строка 64, в ? результаты = файл main () «runtests.py «, строка 58, в основных результатах = unittest. TextTestRunner().run(buildTestSuite()) Файл «runtests.py «, строка 52, в модуле buildTestSuite =__import__(modname, fromlist=’1′) Ошибка типа: __import__() не принимает аргументов ключевого слова

2. __import__ принимает аргументы ключевых слов в Python2.6 (по крайней мере). Какую версию Python вы используете?

3. Я вижу . Вместо использования sys.modules , я думаю module=__import__(modname,{},{},['1']) , также должно работать.

Ответ №2:

Попробуйте что-то вроде:

 suite = unittest.TestSuite()
for t in glob.glob('src/testsuite/test_*.py'):
    try:
        # If the module defines a suite() function, call it to get the suite.
        mod = __import__(t, globals(), locals(), ['suite'])
        suitefn = getattr(mod, 'suite')
        suite.addTest(suitefn())
    except (ImportError, AttributeError):
        # else, just load all the test cases from the module.
        suite.addTest(unittest.defaultTestLoader.loadTestsFromName(t))
  

Комментарии:

1. я получаю сообщение об ошибке: трассировка (последний последний вызов): File «runtests.py «, строка 76, в ? результаты = файл main() «runtests.py «, строка 70, в основных результатах = unittest. TextTestRunner().run(buildTestSuite()) Файл «/usr/lib64/python2.4/unittest.py «, строка 696, в тесте запуска (результат) Ошибка типа: объект ‘NoneType’ не вызывается