Подтвердить что ты не робот

Обнаружение и тестирование Python

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

4b9b3361

Ответ 1

Вам нужно переименовать методы, чтобы начать со слова "тест".

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

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

Ответ 2

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

python -m unittest ./TestMyPythonModule.py

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

Не удается.

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

python -m unittest TestMyPythonModule

Легко упускать из виду вначале.

Ответ 3

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

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

    def testbar(self):
        self.assertTrue(1==2)

Ответ 4

Функции тестирования должны начинаться с имени test So fooTest должно быть testFoo. См. Docs здесь

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