2010-01-10 22 views
42

Soy nuevo en Python y Django y estoy aprendiendo creando un sitio de administración de la dieta, pero he sido completamente derrotado al ejecutar las pruebas de mi unidad. Todos los documentos y blogs que he encontrado dicen que, siempre que se pueda detectar desde tests.py, tests.py está en la misma carpeta que models.py y tus clases de prueba en la subclase TestCase, todo debe ser recogido automáticamente. Esto no funciona para mí, cuando ejecuto manage.py test <myapp> no encuentra ninguna prueba.Django test runner no encuentra las pruebas

Comencé con todas mis pruebas en su propio paquete, pero lo he simplificado a todas las pruebas que están en mi archivo tests.py. El tests.py actual se parece a:

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') 

Lo he probado creando una subclase de la clase TestCase Django también, pero esto no funcionaba bien. Estoy usando Django 1.1.1, Python 2.6 y estoy ejecutando Snow Leopard.

Estoy seguro de que me falta algo muy básico y obvio, pero no sé qué. ¿Algunas ideas?

Editar: Sólo una rápida actualización después de un comentario

INSTALLED_APPS = (
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.admin', 
'pyDietTracker', 
) 

Para obtener las pruebas para funcionar Me postulo manage.py test pyDietTracker

+0

¿Qué comando está ejecutando para que estos se ejecuten? ¿Cómo es tu 'configuración'?¿Esta aplicación está en la lista de INSTALLED_APPS? –

+0

He actualizado la pregunta con mi INSTALLED_APPS, ¿hay alguna otra parte de la configuración que sea relevante? Gracias –

+0

¿Qué mensajes recibes en realidad? –

Respuesta

10

trabajado a cabo.

Resultó que había hecho django-admin.py startproject pyDietTracker pero no python manage.py startapp myApp. Después de regresar y hacer esto, funcionó como está documentado. Parece que tengo mucho que aprender sobre la lectura y la diferencia entre un sitio y una aplicación en Django.

Gracias por su ayuda S.Lott y Emil Stenström. Desearía poder aceptar ambas respuestas porque a ambas se las ayudó mucho.

lección más importante Las pruebas sólo funcionan en el nivel de aplicación, no el nivel del sitio

101

he tenido el mismo problema, pero mi problema era diferente.

Me estaba poniendo Ran 0 tests, como OP.

Pero resulta que los métodos de prueba dentro de su clase de prueba deben comenzar con la palabra clave test para ejecutar.

Ejemplo:

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' 

También las archivos con sus pruebas tienen que empezar con la palabra clave test.

+7

Gran respuesta y una supervisión muy fácil si no está t poniendo atención. ¡Gracias! – nicorellius

+8

si aún no funciona, compruebe si el nombre del archivo coincide con este patrón: 'test * .py' Así es como django selecciona los archivos del traje de prueba. [django doc] (https://docs.djangoproject.com/en/1.7/topics/testing/overview/#running-tests) – linqu

+2

¡bastante irritante! –

3

Esto sucedió cuando tenía un archivo test.py y un subdirectorio/prueba en el mismo directorio de la aplicación Django. Supongo que estoy confundiendo Python o el corrector de prueba si estoy buscando un módulo de prueba (en test.py) o un paquete de prueba (en prueba/subdirectorio).

1

Si usted está tratando de ejecutar una prueba en su aplicación principal, como my_app/my_app/asegurarse de tener los siguientes verificado:

  1. Nombre de la aplicación aparece en INSTALLED_APPS dentro settings.py
  2. Asegúrese DATABASES['default'] su interior settings.py está configurado correctamente
  3. La App tiene un models.py (incluso si no está utilizando uno, al menos uno vacío es necesario para estar allí)
+2

Si usa una carpeta de '' pruebas '', recuerde poner allí un archivo '' _ _init_ _.py ''. – xbello

7

Esto también ocurre si tiene un error de sintaxis en su tests.py.

28

Si está usando un paquete/estilo yourapp/tests para pruebas de unidad, asegúrese de que haya un __init__.py allí (¡porque eso es lo que lo convierte en un módulo de Python!).

3

Aquí hay otra que acabo de tener: compruebe que los archivos de prueba no sean ejecutables. Mi virtualbox los montó automáticamente como ejecutables, por lo que la prueba descubrió que los había omitido por completo. Tuve que agregarlos a los archivos relevantes __init__.py antes de que alguien me dijera cuál era el problema, pero ahora se eliminan y no son ejecutables, y todo _just_ funciona.

7

La solución fue tonta en mi caso, escribí def en lugar de class.

5

Puedo ejecutar pruebas para aplicaciones específicas, p.

python project/manage.py test app_name 

pero cuando corro se encontró

python project/manage.py test 

0 pruebas

Figura cabo necesito para ejecutar esto en el mismo directorio que manage.py

lo que la solución sería , cd al directorio del proyecto y ejecute

python manage.py test 
+0

Lo mismo me pasó a mí (https://github.com/agconti/cookiecutter-django-rest/blob/master/%7B%7Bcookiecutter.github_repository_name%7D%7D/fabfile.py) –

1

Esto también puede suceder cuando utiliza un módulo tests en lugar de tests.py. En este caso, debe importar todas las clases de prueba al __init__.py de su módulo de pruebas, p.

tests/ 
    __init__.py 
    somemodule.py 

En su __init__.py ahora tiene que importar el somemodule así:

from .somemodule import * 
0

El uso de esta sintaxis

python manage.py test 

en lugar de ./manage.py test resolvieron este problema para mí.

Cuestiones relacionadas