14

私は、バックエンドとしてmongodbを使用して、tornado.webで単純なWebアプリケーションを構築しています。サーバー側のコードベースの90%はRequestHandlerのセットに存在し、データオブジェクトの90%はjsonです。結果として、ハンドラーをテストするための基本的なユースケースは次のとおりです。

"Given Request Y and DB in state X,
 verify that handler method Z returns json object J"

この種のテストを設定するにはどうすればよいですか?

このトピックに関するブログ投稿とディスカッションスレッドをいくつか見つけましたが、それらは主に非同期の設定に焦点を当てています。正しい種類のDB状態またはGET/POSTリクエスト引数の設定について何も見つかりません。

4

1 に答える 1

13

私は通常、入力をモックアウトして、出力をテストします。これは、このモックライブラリを使用した不自然な例です-http : //www.voidspace.org.uk/python/mock/ 。正しいmongodbクエリ関数をモックアウトする必要があります。何を使っているのかわかりません。

from mock import Mock, patch
import json


@patch('my_tornado_server.mongo_db_connection.query')
def test_a_random_handler_returns_some_json(self, mock_mongo_query):

    request = Mock()
    # Set any other attributes on the request that you need
    mock_mongo_query.return_value = ['pink', 'orange', 'purple']

    application = Mock()
    handler = RandomHandler(application, request)
    handler.write = Mock()

    handler.get('some_arg')

    self.assertEqual(handler.write.call_args_list, json.dumps({'some': 'data'}))
于 2012-06-21T14:16:59.593 に答える