unittest test run python django python-2.7 python-unittest

python - test - AttributeError: el objeto ''módulo'' no tiene atributo ''pruebas''



tox django (11)

Asegúrese de que todos los módulos que está utilizando en su script no estén rotos. Con esto quiero decir revisar la ortografía en sus declaraciones de importación.

# invalid import from app.model.notification import Notification # valid import from app.models.notification import Notification

Puede probar sus módulos ejecutando declaraciones de importación en la consola interactiva de djano.

$root@13faefes8: python manage.py shell Type "help", "copyright", "credits" or "license" for more information (InteractiveConsole) >>> from app.model.notification import Notification Traceback (most recent call last): File "<console>", line 1, in <module> ImportError: No module named model.notification

Estoy ejecutando este comando:

python manage.py test project.apps.app1.tests

y causa este error:

AttributeError: el objeto ''módulo'' no tiene atributo ''pruebas''

A continuación se muestra mi estructura de directorios. También agregué app1 a mi configuración de aplicaciones instaladas.

Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line utility.execute() File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 50, in run_from_argv super(Command, self).run_from_argv(argv) File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv self.execute(*args, **options.__dict__) File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 71, in execute super(Command, self).execute(*args, **options) File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute output = self.handle(*args, **options) File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 88, in handle failures = test_runner.run_tests(test_labels) File "/home/username/local/dev/local/lib/python2.7/site-packages/django/test/runner.py", line 146, in run_tests suite = self.build_suite(test_labels, extra_tests) File "/home/username/local/dev/local/lib/python2.7/site-packages/django/test/runner.py", line 66, in build_suite tests = self.test_loader.loadTestsFromName(label) File "/usr/lib/python2.7/unittest/loader.py", line 100, in loadTestsFromName parent, obj = obj, getattr(obj, part) AttributeError: ''module'' object has no attribute ''tests''

Estructura de directorios:


De acuerdo con el documento de Django Cuando ejecuta sus pruebas , el comportamiento predeterminado de la utilidad de prueba es encontrar todos los casos de prueba (es decir, subclases de unittest.TestCase ) en cualquier archivo cuyo nombre comience con prueba, construya automáticamente un conjunto de pruebas a partir esos casos de prueba, y ejecuta esa suite.

intente esto: python manage.py test tests.py


El ejemplo anterior de Steve Bradshaw funciona para errores de importación (gracias Steve).

Otro tipo de errores (por ejemplo, ValueError) también puede causar

AttributeError: ''module'' object has no attribute ''tests''

para ver cuáles son estos errores

./manage.py shell from myapp.tests import SomeTestCase t = SomeTestCase()


Finalmente lo descubrí trabajando en otro problema. El problema era que mi prueba no pudo encontrar una importación.

Parece que obtiene el error anterior si su prueba no se puede importar. Esto tiene sentido porque el conjunto de pruebas no puede importar una prueba rota. Al menos creo que esto es lo que está sucediendo porque arreglé la importación dentro de mi archivo de prueba y, efectivamente, comenzó a funcionar.

Para validar su caso de prueba, solo intente importar el archivo del caso de prueba en la consola de Python.

Ejemplo:

from project.apps.app1.tests import *


Obtuve el mismo error, pero verifiqué todas las razones aquí, no solucionó mi problema.

Finalmente descubra que, la razón es que el nombre de un método que importó pero que aún no se utiliza no es correcto. Aunque es un error estúpido, sucede.


Para mi caso, necesito crear un __init__.py vacío en mi carpeta de app/tests


Resolví el error "AttributeError: el módulo ''utils'' no tiene el atributo ''name_of_my_function''" arreglando una referencia de importación circular. Mis archivos manage.py y utils.py cada uno tenía una declaración de importación apuntando el uno al otro.


Tuve el mismo error que Chris. Había eliminado un modelo antiguo, luego ejecuté tests.py, pero otro archivo (views.py) todavía estaba intentando importar el modelo eliminado.

Cuando saqué la declaración de importación ahora obsoleta, el problema se resolvió.


Tuve un error similar al escribir un unittest.TestCase. Cuando volví a escribir la misma definición de método tal como está, ¡parecía funcionar!

El único cambio que noté en PyCharm fue el ícono emergente ''anular'' la segunda vez, ya que el método de configuración (auto) necesita anular el método original definido en TestCase.


Utilizar:

./manage.py shell

seguido por

import myapp.tests

para encontrar la naturaleza del error de importación.


Yo tenía el mismo error. Resultó ser porque llamé a mi módulo common.py, pero ya había otro módulo common.py. Todo lo que tenía que hacer era cambiar el nombre de mi módulo.