2016-06-17 43 views
0

私は本当にシンプルなWebアプリケーションを持っています。すべての重要なものはindex.pyで起こる:Google App Engine + Python WebApp2のローカルユニットテスト

from google.appengine.api import users 
import webapp2 
import os 
import jinja2 

JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), 
    extensions=['jinja2.ext.autoescape'], 
    autoescape=True) 

def get_user(): 
    user = {} 
    user['email'] = str(users.get_current_user()) 
    user['name'], user['domain'] = user['email'].split('@') 
    user['logout_link'] = users.create_logout_url('/') 
    return user 

class BaseHandler(webapp2.RequestHandler): 

    def dispatch(self): 
    user = get_user() 
    template_values = {'user': user} 
    if user['domain'] != 'foo.com': 
     template_values['page_title'] = 'Access Denied' 
     template = '403' 
    else: 
     template_values['page_title'] = 'Home' 
     template = 'index' 
    template_engine = JINJA_ENVIRONMENT.get_template('%s.html' % template) 
    self.response.write(template_engine.render(template_values)) 

app = webapp2.WSGIApplication([ 
    ('/', BaseHandler), 
], debug=True) 

私は良い人で、いくつかのローカルユニットテストを書くしようとしているが、 - documentationを見た後 - 私は完全に私の深さの外にしています。 - インデックス・テンプレートを取得し、取得する必要bar.com @ 1べきでfoo.com @ 1

python test_security.py 

とドメインを打つ二人のユーザーをシミュレートする:私が欲しいのは、私のような何かを行うことができ、基本的なフレームワークです403テンプレート。ここで

は、私がこれまで持っているところです。

import sys 

# I don't want to talk about it, let's just ignore this block 
sys.path.append('C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2') 
sys.path.append('C:\Program Files (x86)\Google\google_appengine\lib\webob-1.2.3') 
sys.path.append('C:\Program Files (x86)\Google\google_appengine\lib\jinja2-2.6') 
sys.path.append('C:\Program Files (x86)\Google\google_appengine\lib\yaml-3.10') 
sys.path.append('C:\Program Files (x86)\Google\google_appengine\lib\jinja2-2.6') 
sys.path.append('C:\Program Files (x86)\Google\google_appengine') 
sys.path.append('C:\pytest') 


# A few proper imports 
import unittest 
import webapp2 
from google.appengine.ext import testbed 

# Import the module I'd like to test 
import index 

class TestHandlers(unittest.TestCase): 
    def test_hello(self): 

     self.testbed = testbed.Testbed() 
     self.testbed.init_user_stub() 
     self.testbed.setup_env(USER_EMAIL='[email protected]',USER_ID='1', USER_IS_ADMIN='0') 

     request = webapp2.Request.blank('/') 
     response = request.get_response(main.app) 

     print "running test" 

     self.assertEqual(response.status_int, 200) 
     self.assertEqual(response.body, 'Hello, world!') 

は予想通り、これはまったく機能しません。私は何が欠けていますか?これがいかに簡単であるべきかを私は過激に過大評価していますか?

+0

「全く機能しない」とは、まったく同じ意味ですか? –

+0

"実行中のテスト"は出力されません - 私はテストを定義したと思いますが、実行するために何をする必要があるのか​​分かりません。私はそれを行こうとするとエラーが出るだろうと確信していますが、それを作ることはいい最初のステップです:) – mcl

答えて

2

あなたは、「Pythonのtest_security.py」でこれを呼び出すことを計画している場合は、あなたが探している魔法の言葉は次のとおりです。

if __name__ == '__main__': 
    unittest.main() 

これはあなたのユニットテストを実行します - あなたがしていることだけでそれを定義しています。

また、request.get_responseを "main.app"から "index.app"に変更する必要があることにも注意してください。

1

self.testbed.init_user_stub()の前にを呼び出すと思われます(self.testbed.setup_env())。

また、最初にself.testbed = testbed.Testbed()があり、おそらくtestbed.activate()が不足しているようです。

あなたはこの答えをチェックアウトする場合があります:https://stackoverflow.com/a/21139805/4495081

+0

これに合わせて編集されたコードサンプル - ありがとう。残念ながら、問題(よく、多くの問題の最初のもの)は、私のテストモジュールが実際には動かないことです(テストプリントが決して起動しません)。 私は、テストの世界が初心者にいかに不透明であるか(おそらく愚かにも)驚いています。アプリは正常に動作しますが、これまでのテストは実際の機能よりも難しくなっています。 – mcl

+1

最初はしばしば難しいです。絶望してはいけないし、あなたが噛むことができる以上に噛まないでください。あなたが新しい技術に精通するまでの小さなステップは、それは簡単です。あなたのコードは、 'test_hello()'メソッドをどのように/どこで呼び出すのかを示していません。 –

+0

ありがとう!私は試し続けます:) – mcl

関連する問題