2015-07-22 9 views
2

У меня есть файл TestProtocol.py, который имеет unittests. Я могу запустить этот скрипт и получить результаты теста для моих 30 тестов, как и ожидалось. Теперь я хочу запустить те тесты из другого файла tester.py, который находится в том же каталоге. Внутри tester.py Я пробовал import TestProtocol, но он запускает 0 тестов.Запуск unittests из другого файла

Тогда я нашел в документации, которая говорит, что я должен сделать что-то вроде этого:

suite = unittest.TestLoader().discover(".", pattern = "*") 
unittest.run(suite) 

Это должно пройти через все файлы в текущем каталоге ., которые соответствуют шаблону *, поэтому все тесты во всех файлах. К сожалению, он снова запускает 0 тестов.

Существует related QA, что предлагает сделать

import TestProtocol 
suite = unittest.findTestCases(TestProtocol) 
unittest.run(suite) 

но также не находит каких-либо тестов.

Как импортировать и запускать мои тесты?

ответ

4

Вы можете попробовать следующее

# preferred module name would be test_protol as CamelCase convention are used for class name 
import TestProtocol 

# try to load all testcases from given module, hope your testcases are extending from unittest.TestCase 
suite = unittest.TestLoader().loadTestsFromModule(TestProtocol) 
# run all tests with verbosity 
unittest.TextTestRunner(verbosity=2).run(suite) 

Вот полный пример

файл 1: test_me.py

# file 1: test_me.py 
import unittest 

class TestMe(unittest.TestCase): 
    def test_upper(self): 
     self.assertEqual('foo'.upper(), 'FOO') 

if __name__ == '__main__': 
    unittest.main() 

файл 2: test_other.py, поставить это под тот же каталог

# file 2: test_other.py, put this under same directory 
import unittest 
import test_me 

suite = unittest.TestLoader().loadTestsFromModule(test_me) 
unittest.TextTestRunner(verbosity=2).run(suite) 

запускать каждый файл, он будет показывать тот же результат

# python test_me.py - Ran 1 test in 0.000s 
# python test_other.py - Ran 1 test in 0.000s 
+0

К сожалению, это тоже дает мне «Ran 0 тестов в 0.000s OK». – nwp

+0

@ nwp Я обновил свой ответ с помощью рабочего примера, надеюсь, что это было бы полезно – Shaikhul

+1

Теперь он работает. Причина, по которой он не работал для меня раньше, заключался в том, что у меня был 'unittest.main()' (без 'if __name__ == '__main __'') внутри 'test_me.py', что помешало обнаружению тестов. – nwp

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