Django тестовый бегун не находит тесты - PullRequest
57 голосов
/ 10 января 2010

Я новичок как в 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

Ответы [ 16 ]

136 голосов
/ 20 января 2011

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

Я получаю 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 .

54 голосов
/ 13 сентября 2014

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

19 голосов
/ 23 февраля 2016

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

python project/manage.py test app_name

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

python project/manage.py test

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

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

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

python manage.py test
11 голосов
/ 12 апреля 2013

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

11 голосов
/ 11 января 2010

Разобрался.

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

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

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

10 голосов
/ 13 января 2016

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

class TestDisplayWeight(TestCase):

у меня было

def TestDisplayWeight(TestCase):
7 голосов
/ 03 октября 2017

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

tests/
    __init__.py
    somemodule.py

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

from .somemodule import *
4 голосов
/ 14 ноября 2018

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

project/
  app_name/
    __init__.py   # this was missing
3 голосов
/ 06 ноября 2014

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

3 голосов
/ 03 апреля 2012

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

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