2012-06-19 11 views
6

मैं पाइथन के लिए बिल्कुल नया हूं, इसलिए अग्रिम में माफी माँगती है अगर यह कुछ बुनियादी के लिए बहुत अधिक है।यूनिट परीक्षण फ्लास्क एप्लिकेशन क्लास

मैं How do you set up a Flask application with SQLAlchemy for testing? के लिए इसी तरह मेरे लिए बड़ा अंतर यह है कि अधिकांश अन्य बोतल उदाहरण के विपरीत मैं इंटरनेट पर देखते हैं स्थिति है, कोड मैं अपने आवेदन के लिए है के सबसे एक कक्षा में है। किसी कारण से, यह मेरे यूनिट परीक्षण को सही ढंग से काम नहीं करने का कारण बन रहा है।

आवेदन::

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. 

आवेदन टेस्ट:

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) 

जब मैं अपने परीक्षण चलाने के माध्यम से

nosetests --with-coverage --cover-package apppackage ./test/test_application.py

नीचे अपने आवेदन और परीक्षण की एक बुनियादी सेटअप है

मैं जीई निम्न त्रुटि टी:

param2).app.test_client() AttributeError: MyApplication instance has no attribute 'app'

मैं कोशिश की कक्षा घोषणा के अंदर एप्लिकेशन चलती है, लेकिन है कि किसी भी अच्छा काम नहीं करता है, और नहीं कैसे हर दूसरे इकाई परीक्षण गाइड मैंने देखा है यह करता है। मेरा यूनिट परीक्षण "ऐप" विशेषता क्यों नहीं ढूंढ सकता?

+1

जैसा कि मार्क ने अपने उत्तर में उल्लेख किया है कि कक्षा में कोई ऐप विशेषता नहीं है। एक विशेषता किसी वर्ग से संबंधित नहीं है जब तक कि हम इसे self.attribute_name = value का उपयोग करके संलग्न न करें या कक्षा के बाहर विधियों के बाहर इसे परिभाषित न करें। – codecool

उत्तर

2

आपका यूनिट परीक्षण "ऐप" विशेषता नहीं ढूंढ सकता क्योंकि MyAplication में कोई नहीं है। मॉड्यूल में एक "ऐप" विशेषता है जहां MyAplication परिभाषित किया गया है। लेकिन वे दो अलग-अलग जगह हैं।

शायद निम्न प्रयास करें:

class MyApplication(object): 
    def __init__(self, param1, param2): 
     self.app = Flask(__name__) 
     self.app.add_url("/path/<methodParam>", "method1", self.method1, methods=["POST"]) 
     # Initialize the app 

वैकल्पिक रूप से, आप भी एक "getApplication" विधि है जो तुम सच के साथ कुछ भी करने से नहीं कर रहे हैं लगता है, लेकिन मुझे लगता है कि आप इसे कुछ के लिए उपयोग कर रहे हैं। शायद आप वास्तव में इसे अपने परीक्षण में चाहते हैं ...

def setUp(self): 
     self.tearDown() 
     param1 = # Param values 
     param2 = # Param values 
     # Other local setup 
     self.app = MyApplication(param1, param2).getApplication().test_client() 
संबंधित मुद्दे