【问题标题】:How to unit test a method that returns a JSON object?如何对返回 JSON 对象的方法进行单元测试?
【发布时间】:2016-10-18 03:11:16
【问题描述】:

我有两个 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

标签: python json unit-testing flask


【解决方案1】:

您使用测试客户端来测试 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 更详细。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多