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

4
我有两个Python脚本:我们称它们为program.py和program_utils.py。 program.py的代码如下:
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.py中,get_json_object()看起来像这样:
def get_json_object(my_var):
  # Do some calls to other methods to create the JSON object using my_var
  return json_object

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

你可以将其视为集成测试,而不是单元测试 - 调用端点并验证您获得有效的 application/json - jonrsharpe
1个回答

6
你可以使用测试客户端来测试 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文档有一个专门的章节进行了介绍。而Werkzeug文档则提供了更加详细的解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接