Python unittest и тестовое открытие - PullRequest
15 голосов
/ 11 октября 2011

Что точно мне нужно сделать, чтобы unittest Python заработал?Я проверил официальную документацию, ТАК вопросы и даже попытался использовать 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 - пустой файл.Есть мысли?

Ответы [ 4 ]

29 голосов
/ 11 октября 2011

Вам необходимо переименовать методы, чтобы начать со слова «тест».

Как видно на http://docs.python.org/library/unittest.html:

Тестовый случай создается путем создания подкласса unittest.TestCase. Три отдельных теста определяются методами, имена которых начинаются с буквенного теста. Это соглашение об именах сообщает исполнителю тестов о том, какие методы представляют тесты.

16 голосов
/ 23 февраля 2015

Я хотел бы отметить, что вы НЕ МОЖЕТЕ запустить модульный тест Python, как если бы это был исполняемый файл Python. Например, это была моя проблема:

python -m unittest ./TestMyPythonModule.py

... (stack trace) ...
ValueError: Empty module name

Не удалось.

Однако это работает:

python -m unittest TestMyPythonModule

Поначалу легко не заметить.

3 голосов
/ 11 октября 2011

unittest.main () запустит все функции, которые начинаются с «test». Поэтому вы должны переименовать свои функции

class EchoTest(unittest.TestCase):  
    def testfoo(self):
        self.assertTrue(1==1)

    def testbar(self):
        self.assertTrue(1==2)
1 голос
/ 11 октября 2011

Тестовые функции должны начинаться с имени test, поэтому fooTest должно быть testFoo. Смотри документы здесь

Кроме того, нет необходимости в файле __init__.py, при условии, что это только два файла в вашем каталоге tests.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...