2016-03-20 5 views
2

現在のアプリケーションの設定に依存する呼び出しコードに依存する単体テストを処理する最善の方法は何ですか?私の上にテストを実行ユニットテスト中のFlask app.config

例えば

code.py

from flask import current_app 

def some_method(): 
    app = current_app._get_current_object() 
    value = (app.config['APP_STATIC_VAR'])*10 
    return value 

test_code.py

class TestCode(unittest.TestCase): 
    def test_some_method(self): 
     app = create_app('app.settings.TestConfig') 
     value = some_method() 
     self.assertEqual(10, value) 

は '例外RuntimeError:アプリケーションのコンテキストの外で働く' 取得時にアプリのエラーを= create_app( 'app.settings.TestConfig')行が実行されます。

テスト中にapp = create_appを呼び出すと、このトリックは実行されません。この場合、アプリケーションでconfigを読み込む必要がある場合、単体テストにはどのような方法が最適ですか?

+1

。したがって、ユニットテストを可能にするためにコードをリファクタリングするか(例えば、コンフィグを渡す)か、あるいは統合テストのためのメソッドを適用する必要があります。それが標準的な答えです。 [しかし、私も 'unitest'を伸ばす傾向があります(http://stackoverflow.com/questions/36068957/mocking-where-its-defined-in-python-mock)と私は誰かがクールなアイデア。たぶん、 '' flask.current_app'かそこらをmock.patch'ing ... – flaschbier

+0

私が尋ねる質問はあなたが別の設定値をテストするために探している正確に何ですか?あなたのアプリはどのように振る舞いますか?また、さまざまなアプリケーションの設定で、Flaskの[テストクライアント](http://flask.pocoo.org/docs/0.10/testing/#the-testing-skeleton)を利用できますか? – idjaw

答えて

2

あなたはとあなたの呼び出しを置き換えるそれを修正するためにあなたがsome_method(呼び出したとき)アプリのコンテキスト内でアプリにアクセスして使用している:実際にあなたがここでユニットテストが、統合テストを行っていない

with app.app_context(): 
    value = some_method() 
関連する問題