Тест-драйв Django не находит тесты
Я новичок как в Python, так и в Django, и я учусь, создав сайт для управления диетой, но я был полностью побежден, получив мои модульные тесты для запуска. Все найденные документы и блоги говорят, что до тех пор, пока он обнаруживается с помощью test.py, test.py находится в той же папке, что и models.py, а ваш класс подклассов TestCase вашего класса должен автоматически подбираться. Это не работает для меня, когда я запускаю manage.py test <myapp>
, он не находит никаких тестов.
Я начал со всех своих тестов в своем собственном пакете, но упростил его до всех тестов, только находясь в моем файле tests.py. Текущий test.py выглядит так:
import unittest
from pyDietTracker.models import Weight
from pyDietTracker.weight.DisplayDataAdapters import DisplayWeight
class TestDisplayWeight(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def testGetWeightInStone_KG_Correctly_Converted(self):
weight = Weight()
weight.weight = 99.8
testAdapter = DisplayWeight(weight)
self.assertEquals(testAdapter.GetWeightInStone(), '15 st 10 lb')
Я попробовал это, добавив класс Django TestCase, но это тоже не сработало. Я использую Django 1.1.1, Python 2.6, и я запускаю Snow Leopard.
Я уверен, что мне не хватает чего-то очень простого и очевидного, но я просто не могу понять, что. Любые идеи?
Изменить: просто быстрое обновление после комментария
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'pyDietTracker',
)
Чтобы запустить тесты, я запускаю manage.py test pyDietTracker
Ответы
Ответ 1
Проработал.
Оказывается, я сделал django-admin.py startproject pyDietTracker
, но не python manage.py startapp myApp
. Вернувшись и выполняя это, он работал как задокументированный. Казалось бы, мне нужно много узнать о чтении и о различии между сайтом и приложением в Django.
Спасибо за помощь С.Лотта и Эмиля Стенстрема. Хотелось бы, чтобы я согласился с вашими ответами, потому что они оба очень помогли.
Самый важный урок Тесты работают только на уровне приложения, а не на уровне сайта
Ответ 2
У меня была та же проблема, но моя проблема была другой.
Я получал Ran 0 tests
, как OP.
Но оказывается, что тестовые методы внутри вашего тестового класса должны начинаться с ключевого слова test
для запуска.
Пример:
from django.test import TestCase
class FooTest(TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def this_wont_run(self):
print 'Fail'
def test_this_will(self):
print 'Win'
Также файлы с вашими тестами должны начинаться с ключевого слова test
.
Ответ 3
Если вы используете пакет/стиль yourapp/tests
для юнит-тестов, убедитесь, что там есть __init__.py
(поскольку это делает его модулем Python!).
Ответ 4
Я могу запустить тест для определенных приложений, например.
python project/manage.py test app_name
но когда я запустил
python project/manage.py test
Было найдено 0 тестов
Рисунок: Мне нужно запустить его в том же каталоге, что и manage.py
таким образом, решение было бы, cd, чтобы создать каталог проекта и запустить
python manage.py test
Ответ 5
Это также происходит, если у вас есть синтаксическая ошибка в test.py.
Ответ 6
В моем случае я набрал def
вместо class
. Вместо
class TestDisplayWeight(TestCase): # correct!
у меня было
def TestDisplayWeight(TestCase): # wrong!
Ответ 7
Это также может случиться, если вы используете модуль tests
вместо tests.py
. В этом случае вам нужно импортировать все тестовые классы в __init__.py
вашего тестового модуля, например.
tests/
__init__.py
somemodule.py
В __init__.py
теперь вам нужно импортировать somemodule
следующим образом:
from .somemodule import *
Ответ 8
В моем случае в самой папке приложения отсутствовал __init__.py
. Это приводит к тому, что тест будет выполняться с python manage.py test project.app_name
но не с python manage.py test
.
project/
app_name/
__init__.py # this was missing
Ответ 9
Вот еще один, который у меня был: проверьте, что ваши тестовые файлы не исполняются. Мой виртуальный бокс автоматически установил их как исполняемый файл, поэтому тестовое обнаружение пропустило их полностью. Я должен был добавить их в соответствующие файлы __init__.py
, прежде чем кто-нибудь скажет мне, что проблема была как работа, но теперь они удалены, а не исполняются и все _just_works.
Ответ 10
Это произошло, когда у меня был файл test.py и подкаталог test/в том же каталоге приложений Django. Я предполагаю, что я запутываю python или тестировщика, ищу ли я тестовый модуль (в test.py) или тестовый пакет (в test/subdir).
Ответ 11
в моем случае я пропускаю запуск имени моей функции с test_, а когда запускаю тест с:
python manage.py test myapp
результат был:
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Destroying test database for alias 'default'...
кажется, Джанго не может распознать мои тесты!
затем я изменяю файл myproject/myapp/test.py следующим образом:
from django.test import TestCase
# Create your tests here.
class apitest(TestCase):
def test_email(self):
pass
def test_secend(self):
pass
после этого результата:
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 2.048s
OK
Destroying test database for alias 'default'...
Ответ 12
Смотрите https://docs.djangoproject.com/en/1.11/topics/testing/overview/
Самая распространенная причина, по которой тесты не выполняются, заключается в том, что ваши настройки неверны, а ваш модуль отсутствует в INSTALLED_APPS.
Мы используем django.test.TestCase
вместо unittest.TestCase
. В него входит Client
.
https://docs.djangoproject.com/en/1.11/topics/testing/tools/#django.test.TestCase
Ответ 13
Если вы пытаетесь запустить тест в своем основном приложении, например my_app/my_app/, убедитесь, что у вас есть следующее:
- Имя приложения указано в INSTALLED_APPS внутри
settings.py
- Убедитесь, что ваш
DATABASES['default']
внутри settings.py
установлен правильно
- Приложение имеет
models.py
(даже если вы его не используете, требуется хотя бы один пуст)
Ответ 14
Используя этот синтаксис
python manage.py test
вместо ./manage.py test
решил эту проблему для меня.
Ответ 15
В одном и том же файле у меня было два класса тестов с ОДИНАКОВЫМ ИМ, и, конечно, это препятствовало запуску всех тестов.
Ответ 16
Я создал метод run
в моем тестовом классе, который оказался очень плохой идеей. Python мог видеть, что я хотел запустить тесты, но не смог. Эта проблема немного отличается, но результат тот же - создается впечатление, что тесты найти невозможно.
Обратите внимание, что было отображено следующее сообщение: You want to run the existing test: <unittest.runner.TextTestResult run=0 errors=0 failures=0>
Ответ 17
Запустите --help
и посмотрите на подробности. Провернуть это до макс.
Я запустил manage.py test --verbose
и нашел этот отладочный вывод прямо вверху:
>nosetests --with-spec --spec-color --verbose --verbosity=2
.
О, посмотри! Я установил и забыл о nosetests
. И это говорит --verbosity=2
. Я понял, что 3 - это максимум, и запустив его с 3, я нашел много таких:
nose.selector: INFO: /media/sf_C_DRIVE/Users/me/git/django/app/tests/test_processors.py is executable; skipped
Это дало мне правильный намек. У него действительно есть проблемы с файлами с установленным x-битом. Тем не менее, я был сбит с толку, так как он выполнил НЕКОТОРЫЕ из тестов - хотя он явно сказал, что пропустит их. Изменение битов невозможно, так как я запускаю тесты на виртуальной машине, разделяя мой Windows NTFS-диск. Так что добавление --exe
исправило это.