龙卷风中的单元测试

Abe*_*Abe 12 python unit-testing tornado

我正在使用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"
Run Code Online (Sandbox Code Playgroud)

我该如何设置这种测试?

我在这个主题上找到了一些博客文章和讨论主题,但他们主要关注的是设置asyncronous.我找不到任何关于设置正确类型的DB状态或GET/POST请求参数的信息.

ayc*_*dee 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'}))
Run Code Online (Sandbox Code Playgroud)