2011-06-03 6 views
5

मैं Google App Engine - Python के साथ टीडीडी के लिए अपना पर्यावरण कैसे सेट अप करने के लिए संघर्ष कर रहा हूं। (मैं पाइथन के लिए भी बहुत नया हूं)। मेरे वातावरण इस प्रकार है:यूनिट टेस्ट वेबपैप। जीईई में रिवेस्ट हैंडलर - पायथन

  • Google अनुप्रयोग इंजन 1.5.0
  • इंटेलीजे 10.2
  • इंटेलीजे सेटअप इस परियोजना

मैं अजगर के साथ इंटेलीजे उपयोग कर रहा हूँ के लिए अजगर 2.5.4 उपयोग करने के लिए प्लगइन, इसलिए unittests चलाना ctrl-shft-f10 मारने के रूप में सरल है।

मैंने टेस्टबेड पर प्रलेखन भी पढ़ा है और सफलतापूर्वक डेटास्टोर और memcache का परीक्षण किया है। हालांकि, जहां मैं अटक गया हूं, मैं अपने अनुरोध हैंडलर को कैसे बेकार कर सकता हूं। मैंने Google पर बहुत से लेख स्कैन किए हैं और उनमें से अधिकतर टेस्टबेड के रूप में gae में gaetestbed के विलय से पहले विलय कर रहे हैं।

निम्न कोड नमूने में, मुझे पता है कि कैसे एक इकाई परीक्षण (जो IntelliJ में runnable है), जो परीक्षण लिखने के लिए चाहते हैं कि '/' रिटर्न के लिए एक कॉल -> मुख पृष्ठ

from google.appengine.ext import webapp 
import wsgiref.handlers 

class MainHandler(webapp.RequestHandler): 

    def get(self): 
     self.response.out.write('Home Page') 

paths = [ 
      ('/', MainHandler) 
     ] 

application = webapp.WSGIApplication(paths, debug=True) 

def main(): 
    wsgiref.handlers.CGIHandler().run(application) 

if __name__ == '__main__': 
    main() 

से निक जॉनसन का जवाब नीचे, मैंने परीक्षण नामक एक नया फ़ोल्डर जोड़ा और उस फ़ोल्डर में फ़ाइल को जोड़ा जो unit_test.py कहा जाता है। उस फ़ाइल में मैंने निम्नलिखित कोड जोड़ा (नीचे क्रिस का जवाब से संशोधित):

from StringIO import StringIO 
from main import MainHandler 
import unittest 
from google.appengine.ext import webapp 

class MyTestCase(unittest.TestCase): 
    def test_get(self): 
     request = webapp.Request({ 
      "wsgi.input": StringIO(), 
      "CONTENT_LENGTH": 0, 
      "METHOD": "GET", 
          "PATH_INFO": "/", 
     }) 
     response = webapp.Response() 
     handler = MainHandler() 
     handler.initialize(request, response) 
     handler.get() 
     self.assertEqual(response.out.getvalue(), "Home Page") 

और अब यह काम करता है!

request = webapp.Request({ 
    "wsgi.input": StringIO.StringIO(), 
    "CONTENT_LENGTH": 0, 
    "METHOD": "GET", 
}) 
request.path = '/' 
response = webapp.Response() 
handler = MainHandler() 
handler.initialize(request, response) 
handler.get() 
self.assertEqual(response.body, "Home Page") 
+0

मैं भी मेरी पर्यावरण के बारे में जानकारी नहीं जोड़ी के रूप में कोड नमूने में MainHandler ले जाया गया तो रास्तों यह – Erds

+0

कोड मैं निक जॉनसन जवाब – Erds

उत्तर

3

मैंने पाया कि मैं निक जॉनसन कोड का एक थोड़ा संशोधित संस्करण की जरूरत:

+0

ऐसा हुआ, धन्यवाद! – Erds

1

यह करने के लिए सबसे आसान तरीका है हैंडलर का दृष्टांत और यह अनुरोध और प्रतिक्रिया वस्तुओं गुजरती हैं, तो परिणामों पर जोर देने के लिए है :

request = webapp.Request({ 
    "wsgi.input": StringIO.StringIO(), 
    "CONTENT_LENGTH": 0, 
    "METHOD": "GET", 
    "PATH_INFO": "/", 
}) 
response = webapp.Response() 
handler = MainHandler() 
handler.initialize(request, response) 
handler.get() 
self.assertEqual(response.out.getvalue(), "Home Page") 
+0

कूल से इस्तेमाल किया संदर्भ सकता है जोड़ा गया, मैं दे देंगे कि एक एक बार जाना मैं काम से घर जाओ! – Erds

+0

मैंने आपका कोड जोड़ा है कि मैंने ऊपर दिए गए प्रश्न की कोशिश की है। मुझे 'request.path' लाइन पर एक त्रुटि प्राप्त हो रही है। मुझे 'विशेषता त्रुटि मिल रही है: विशेषता सेट नहीं कर सकता' – Erds

संबंधित मुद्दे