Soy bastante nuevo en Python, así que mis disculpas de antemano si esto es mucho ruido para algo básico.Unidad probando una clase de aplicación Flask
Tengo una situación similar a How do you set up a Flask application with SQLAlchemy for testing? La gran diferencia para mí es que a diferencia de la mayoría de los ejemplos de Flask que veo en Internet, la mayoría del código que tengo para mi aplicación es de una clase. Por alguna razón, esto está causando que las pruebas de mi unidad no funcionen correctamente. A continuación se muestra una configuración básica de mi solicitud y las pruebas:
aplicación:
from Flask import Flask
app = Flask(__name__)
class MyApplication():
def __init__(self, param1, param2):
app.add_url("/path/<methodParam>", "method1", self.method1, methods=["POST"])
# Initialize the app
def getApplication(self):
options = # application configuration options
middleware = ApplicationMiddleware(app, options)
return middleware
def method1(self, methodParam):
# Does useful stuff that should be tested
# More methods, etc.
pruebas de aplicación:
import unittest
from apppackage import MyApplication
class ApplicationTestCase(unittest.TestCase):
def setUp(self):
self.tearDown()
param1 = # Param values
param2 = # Param values
# Other local setup
self.app = MyApplication(param1, param2).app.test_client()
def tearDown(self):
# Clean up tests
def test_method1(self):
methodParam = # Param value
response = self.app.post("path/methodParam")
assert(reponse.status_code == 200)
Cuando ejecuto mis pruebas a través de
nosetests --with-coverage --cover-package apppackage ./test/test_application.py
I ge t el siguiente error:
param2).app.test_client() AttributeError: MyApplication instance has no attribute 'app'
He tratado de aplicación dentro de la declaración de la clase en movimiento, pero eso no hace ningún bien, y no cómo cada otro guía de la unidad de pruebas que he visto hace es. ¿Por qué mis pruebas unitarias no pueden encontrar el atributo "aplicación"?
Como Mark ha mencionado en su respuesta, no hay ningún atributo de aplicación en la clase. Un atributo no pertenece a una clase a menos que lo adjuntemos utilizando self.attribute_name = value o lo definamos antes de los métodos dentro de la clase que no está fuera. – codecool