it-roy-ru.com

Джанго бегун не находит тесты

Я новичок как в Python, так и в Django, и я учусь, создавая сайт для управления диетой, но я был полностью побежден, выполнив мои модульные тесты. Во всех документах и ​​блогах, которые я обнаружил, говорится, что, если его можно найти в файле tests.py, tests.py находится в той же папке, что и models.py, и подклассах вашего тестового класса TestCase, то все они должны быть обнаружены автоматически. Это не работает для меня, когда я запускаю manage.py test <myapp>, он не находит никаких тестов.

Я начал со всех своих тестов в их собственном пакете, но упростил его до всех тестов, просто находящихся в моем файле tests.py. Текущий tests.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

49
user1333

Сработало.

Оказывается, я сделал Django-admin.py startproject pyDietTracker, но не python manage.py startapp myApp. Вернувшись назад и сделав это, он работал так, как задокументировано. Похоже, мне нужно многое узнать о чтении и различиях сайта и приложения в Django.

Спасибо за помощь С.Лотту и Эмилю Стенстрёму. Я хотел бы принять оба ваших ответа, потому что они оба очень помогли.

Самый важный урок Тесты работают только на уровне приложения, а не на уровне сайта

11
user1333

У меня была та же проблема, но моя проблема была другой.

Я получал Ran 0 tests, как OP.

Но оказывается, что test методы внутри вашего тестового класса должны начинаться с ключевого слова 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.

129
Eduardo

Если вы используете пакет/стиль yourapp/tests для юнит-тестов, убедитесь, что там есть __init__.py (поскольку именно это делает его модулем Python!).

48
David Lam

Я могу запустить тест для конкретных приложений, например.

python project/manage.py test app_name

но когда я бегу

python project/manage.py test

0 тестов найдено

Выясните, мне нужно запустить это в том же каталоге, что и manage.py

так что решение будет, перейдите в каталог проекта и запустите

python manage.py test
14
codingrhythm

В моем случае я набрал def вместо class. Вместо 

class TestDisplayWeight(TestCase):

Я имел

def TestDisplayWeight(TestCase):
10
Flimm

Это также происходит, если у вас есть синтаксическая ошибка в вашем tests.py.

9
Daniel Gasull

Это также может произойти, когда вы используете модуль tests вместо tests.py. В этом случае вам необходимо импортировать все тестовые классы в __init__.py вашего тестового модуля, например,.

tests/
    __init__.py
    somemodule.py

В вашем __init__.py теперь вам нужно импортировать somemodule следующим образом:

from .somemodule import *
6
devsnd

Вот еще один, который у меня только что был: Проверьте, что ваши тестовые файлы не являются исполняемыми. Моя виртуальная коробка автоматически смонтировала их как исполняемые, поэтому тестовое обнаружение пропустило их полностью. Мне пришлось добавить их в соответствующие файлы __init__.py, прежде чем кто-то сказал мне, в чем проблема, как обойти, но теперь они удалены, и неисполняемые и все _just_works.

3
David Boshton

В моем случае в самой папке приложения отсутствовал __init__.py. Это приводит к тому, что тест будет выполняться с python manage.py test project.app_name, но не с python manage.py test.

project/
  app_name/
    __init__.py   # this was missing
3
Thijs

Это произошло, когда у меня был файл test.py и подкаталог test/в том же каталоге приложения Django. Я предполагаю, что запутываю python или тестового бегуна, ищу ли я тестовый модуль (в test.py) или тестовый пакет (в test/subdir).

3
Nils

Если вы пытаетесь запустить тест в своем основном приложении, например, my_app/my_app /, убедитесь, что у вас проверено следующее:

  1. Имя приложения указано в INSTALLED_APPS внутри settings.py
  2. Убедитесь, что ваш DATABASES['default'] внутри settings.py установлен правильно
  3. Приложение имеет models.py (даже если вы его не используете, по крайней мере, пустой должен быть там)
1
Dean Quiñanola

Смотрите 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

1
S.Lott

в моем случае я пропускаю запуск имени моей функции с 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 file так:

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'...
0
Benyamin

Используя этот синтаксис

python manage.py test

вместо ./manage.py test решил эту проблему для меня.

0
Aleksandr Aksarin

В том же файле у меня было два тестовых класса с SAME NAME , и, конечно, это помешало запуску всех тестов.

0
Rick Graves

Я создал метод под названием run в своем тестовом классе, что оказалось очень плохой идеей. Python мог видеть, что я хотел запустить тесты, но не смог. Эта проблема немного отличается, но результат тот же - создается впечатление, что тесты не могут быть найдены.

Обратите внимание, что было отображено следующее сообщение: You want to run the existing test: <unittest.runner.TextTestResult run=0 errors=0 failures=0>

0
Qarj