14

我正在使用 mongodb 作为后端在 tornado.web 中构建一个简单的 Web 应用程序。90% 的服务器端代码库存在于一组 RequestHandlers 中,90% 的数据对象是 json。因此,测试处理程序的基本用例是:

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

如何设置这种测试?

我发现了一些关于该主题的博客文章和讨论线程,但它们主要集中在设置异步。我找不到任何关于设置正确类型的数据库状态或 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 回答