如何对返回JSON对象的方法进行单元测试?

时间:2016-06-16 14:21:07

标签: python json unit-testing flask

我有两个Python脚本:让我们称之为program.py和program_utils.py。

program.py看起来像这样:

docker exec -i mysql.5.7 mysql < dump.sql
program_utils.py中的

get_json_object()如下所示:

from flask import Flask, request, jsonify
import program_utils

app = Flask(__name__)
@app.route('/mypage')
def my_func():
  # Do some stuff here and get a URL parameter
  my_var = request.args.get('my_var')
  # Get JSON object from another function in program_utils
  return program_utils.get_json_object(my_var)

我的问题是如何在program_utils中为get_json_object创建单元测试,以确保它以正确的格式返回对象?我已经尝试编写一个常规的单元测试(将该方法视为返回一个字符串),但是出现了一个运行时错误,说“在应用程序上下文之外工作”。

1 个答案:

答案 0 :(得分:5)

您使用测试客户端测试Flask视图。使用app.test_client()创建它,然后使用它来模拟对路线的请求。响应只包含原始数据,如果您想将其作为JSON进行比较,则需要加载它。

c = app.test_client()
rv = c.get('/mypage', query_string={'my_var': 'my_value'})
assert json.loads(rv.get_data()) == expected_data

Flask docs有一整节用于介绍这一点。 Werkzeug docs详细介绍。