Jestem całkiem nowa w Pythonie, więc z góry przepraszam, jeśli jest to zbyt wzruszające dla czegoś podstawowego.Jednostka testująca aplikację aplikacji Flask klasa
Mam sytuację podobną do How do you set up a Flask application with SQLAlchemy for testing? Największą różnicą jest dla mnie to, że w przeciwieństwie do większości innych przykładów Flas, które widzę w Internecie, większość kodu, który mam dla mojej aplikacji, jest w klasie. Z jakiegoś powodu powoduje to, że moje testy jednostkowe nie działają poprawnie. Poniżej znajduje się podstawowa konfiguracja mojej aplikacji i testów:
Zastosowanie:
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.
badania aplikacyjne:
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)
Gdy uruchomię moich testów poprzez
nosetests --with-coverage --cover-package apppackage ./test/test_application.py
I ge t następujący błąd:
param2).app.test_client() AttributeError: MyApplication instance has no attribute 'app'
Próbowałem poruszający aplikację wewnątrz deklaracji klasy, ale to nie ma nic dobrego, a nie jak każdy inny przewodnik testowanie jednostkowe Widziałem to robi to. Dlaczego moje testy jednostkowe nie mogą znaleźć atrybutu "aplikacja"?
Jak zaznaczył Mark w swojej odpowiedzi, w klasie nie ma atrybutu aplikacji. Atrybut nie należy do klasy, chyba że dołączymy go za pomocą self.attribute_name = value lub zdefiniujemy go przed metodami wewnątrz klasy, a nie na zewnątrz. – codecool