2015-07-22 2 views
1

У меня есть два модуля с двумя разными классами и соответствующими классами тестов.Можно ли запустить весь модульный тест?

foo.py 
------ 
class foo(object): 
    def fooMethod(self): 
     // smthg 

bar.py 
------ 
class bar(object): 
    def barMethod(self): 
     // smthg 

fooTest.py 
------ 
class fooTest(unittest.TestCase): 
    def fooMethodTest(self): 
     // smthg 

barTest.py 
------ 
class barTest(unittest.TestCase): 
    def barMethodTest(self): 
     // smthg 

В любом, испытания и модуль источника, файл, я стертаif __name__ == "__main__": из-за увеличения когерентность и подчиняться объектно-ориентированной идеологии.

Как и в модульном модуле Java, я ищу создание модуля для запуска всех unittest. Например,

runAllTest.py 
------------- 
class runAllTest(unittest.TestCase): 
    ????? 

if __name__ == "__main__": 
    ????? 

Я искал поисковую систему, но не нашел учебника или примера. Можно ли это сделать? Зачем? или как?

Примечание: Я использую распределение eclipse и pydev на компьютере с Windows.

+1

Я бы переименовать тестовые файлы в формате «test_foo.py» и запустите 'nosetests' в тестовом каталоге. 'нос' будет автоматически обнаруживать все тестовые файлы и тестовые классы. – suzanshakya

ответ

2

Вы можете создать TestSuite и запустить все тесты в это if __name__ == '__main__' блок:

import unittest 

def create_suite(): 
    test_suite = unittest.TestSuite() 
    test_suite.addTest(fooTest()) 
    test_suite.addTest(barTest()) 
    return test_suite 

if __name__ == '__main__': 
    suite = create_suite() 

    runner=unittest.TextTestRunner() 
    runner.run(suite) 

Если вы не хотите создавать тестовые примеры вручную посмотреть на this quesiton/answer, который в основном создает тестовые случаи динамически, или использовать некоторые из особенностей unittest модуля как test discovery функции и command line вариантов ..

0

Я думаю, что вы ищете является TestLoader. При этом вы можете загружать определенные тесты или модули или загружать все в заданный каталог. Кроме того, сообщение this содержит несколько полезных примеров с использованием экземпляра TestSuite.

EDIT: код, который я обычно в моем test.py:

if not popts.tests: 
    suite = unittest.TestLoader().discover(os.path.dirname(__file__)+'/tests') 
    #print(suite._tests) 

    # Print outline 
    lg.info(' * Going for Interactive net tests = '+str(not tvars.NOINTERACTIVE)) 

    # Run 
    unittest.TextTestRunner(verbosity=popts.verbosity).run(suite) 
else: 
    lg.info(' * Running specific tests') 

    suite = unittest.TestSuite() 

    # Load standard tests 
    for t in popts.tests: 
     test = unittest.TestLoader().loadTestsFromName("tests."+t) 
     suite.addTest(test) 

    # Run 
    unittest.TextTestRunner(verbosity=popts.verbosity).run(suite) 

делает две вещи:

  1. Если флаг -t (тесты) нет, найти и загрузить все тесты в каталоге
  2. Else, загрузить требуемые тесты один за одним
+0

Почему -1? – urban

0

Вы ищете nosetests.

Вы, , может быть необходимо переименовать ваши файлы; Я не уверен, что нос шаблона использует для поиска тестовых файлов, но лично я использую *_test.py. Можно указать настраиваемый шаблон, который ваш проект использует для тестовых имен файлов, но я помню, что не смог заставить его работать, поэтому вместо этого я переименовал свои тесты.

Вам также необходимо следовать за PEP 328 конвенциями для работы с носом. Я не использую IDE с Python, но ваша IDE уже может следовать за ним - просто прочитайте PEP и проверьте.

С структурой PEP 328 каталог/пакет, вы можете запускать отдельные тесты, как

nosetests path.to.class_test 

Обратите внимание, что вместо обычных сепараторах каталогов (/ или \), я использовал точки.

Чтобы запустить все тесты, просто введите nosetests в корень вашего проекта.

1

С помощью PyDev щелкните правой кнопкой мыши по папке в Eclipse и выберите «Run as-> Python unit-test». Это запустит все тесты в этой папке (имена тестовых файлов и методов должны начинаться с «test_».)

0

Я думаю, что вы можете просто запустить следующую команду в папке, где находятся ваши файлы тестов:

python -m unittest 

как упомянуто здесь, в doc, что «при выполнении без аргументов Test Discovery запускается»

Смежные вопросы