Sono abbastanza nuovo per Python, quindi mi scuso in anticipo se questo è molto rumore per qualcosa di base.Unit test a una classe di applicazione Flask
Ho una situazione simile a How do you set up a Flask application with SQLAlchemy for testing? La grande differenza per me è che a differenza della maggior parte degli altri esempi di Flask che vedo su Internet, la maggior parte del codice che ho per la mia applicazione è in una classe. Per qualche ragione, questo sta facendo sì che il mio test dell'unità non funzioni correttamente. Qui di seguito è una configurazione di base della mia applicazione e test:
di applicazione:
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.
Test Application:
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)
Quando eseguo i miei test tramite
nosetests --with-coverage --cover-package apppackage ./test/test_application.py
I ge t il seguente errore:
param2).app.test_client() AttributeError: MyApplication instance has no attribute 'app'
Ho provato app all'interno della dichiarazione della classe in movimento, ma che non fa nulla di buono, e non come ogni altra guida unit testing che ho visto non lo è. Perché i miei test di unità non possono trovare l'attributo "app"?
Come Mark ha menzionato nella sua risposta, non c'è nessun attributo app nella classe. Un attributo non appartiene a una classe a meno che non lo si colleghi usando self.attribute_name = value o definendolo prima dei metodi all'interno della classe non all'esterno. – codecool