#python #unit-testing #python-2.7
#python #модульное тестирование #python-2.7
Вопрос:
Что именно мне нужно сделать, чтобы заставить python unittest
работать? Я проверил официальную документацию, вопросы SO и даже пытался использовать nose
, но пока ничего не получалось. Что я делаю не так?
bash:~/path/to/project/src/tests$ ls -l
total 8
-rw-r--r-- 1 myuser myuser 342 Out 11 11:51 echo_test.py
-rw-r--r-- 1 myuser myuser 71 Out 11 11:28 __init__.py
bash:~/path/to/project/src/tests$ python -m unittest -v echo_test
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
bash:~/path/to/project/src/tests$ python -m unittest discover
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
bash:~/path/to/project/src/tests$ cat echo_test.py
import unittest
class EchoTest(unittest.TestCase):
def fooTest(self):
self.assertTrue(1==1)
def barTest(self):
self.assertTrue(1==2)
#suite = unittest.TestLoader().loadTestsFromTestCase(TestEcho)
#unittest.TextTestRunner(verbosity=2).run(suite)
if __name__ == '__main__':
unittest.main()
Как вы можете видеть, тесты просто не выполняются, и я понятия не имею, почему (поскольку я не программист на python).
Просто для информации, я использую python 2.7, и __init__.py
это пустой файл.
Есть мысли?
Ответ №1:
Вам нужно переименовать методы, чтобы они начинались со слова «тест».
Как видно на http://docs.python.org/library/unittest.html :
Тестовый набор создается с помощью подкласса unittest.TestCase. Три отдельных теста определяются с помощью методов, имена которых начинаются с букв test . Это соглашение об именовании информирует тестировщика о том, какие методы представляют тесты.
Ответ №2:
Я хотел бы упомянуть, что вы НЕ МОЖЕТЕ запустить модульный тест python, как если бы это был исполняемый файл python. Например, это была моя проблема:
python -m unittest ./TestMyPythonModule.py
... (stack trace) ...
ValueError: Empty module name
Сбой.
Однако это работает:
python -m unittest TestMyPythonModule
Поначалу это легко не заметить.
Комментарии:
1. просто чтобы добавить сюда свои центы. если тестовый модуль
TestMyPythonModule.py
находится в папкеtests
, правильная командаpython -m unittest tests.TestMyPythonModule
. Иногда встроенные терминалы в IDE автозаполняют егоpython -m unittest .testsTestMyPythonModule
, но это выдаетEmpty module name
ошибку.
Ответ №3:
unittest.main() запустит все функции, которые начинаются с «test». Поэтому вам следует переименовать свои функции
class EchoTest(unittest.TestCase):
def testfoo(self):
self.assertTrue(1==1)
def testbar(self):
self.assertTrue(1==2)
Комментарии:
1. Это сработало для меня. Еще одна вещь, которую я должен был сделать, чтобы заставить discovery работать (вместо вызова unittest.main()), — это переименовать файл из name_test.py чтобы test_name.py
Ответ №4:
Тестовые функции должны начинаться с имени test
, так fooTest
и должно быть testFoo
. Смотрите Документы здесь
Кроме того, нет необходимости в __init__.py
файле, предполагая, что это единственные два файла в вашем tests
каталоге.