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

Тест-драйв 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

4b9b3361

Ответ 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 исправило это.