我正在尝试对一些代码进行单元测试,并希望断言代码的jsonify输出是正确的。这是我到目前为止所做的。
def test_get_ticket(self):
with self.app.test_request_context('/?main_id=14522&user_id=82'):
methodOutput = brain_get_ticket.get_ticket({'main_id': {1: 0}, 'status': {'Closed': 0},
'available': {'False': 0}}, "main_id, status, available",
['main_id', 'status', 'available'])
correct_return_output = json.dumps(dict(
to_be_working_on_last_id=0,
to_be_working_on_id=6,
information={'status': {'Closed': 1}, 'available': {'False': 1}, 'main_id': {1: 1}}
))
self.assertEquals(json.loads(methodOutput.data()), correct_return_output, "output was: " + str(methodOutput) + " it should be: " + str(correct_return_output))
我得到的输出是:
self.assertEquals(json.loads(methodOutput.data()), correct_return_output)
TypeError: 'str' object is not callable
任何建议????
解决:
主要问题是我使用的数据好像是一个方法,而不是描述符,就像Martijn说的那样。同时将correct_return_output更改为字典而不是jsonify对象,以与实际的方法输出进行比较。谢谢!
答案 0 :(得分:1)
Response.data
is a descriptor并且不需要被调用;你试图在这里调用返回的JSON字符串。
你最好的选择是解码那个JSON响应;字典是无序的,您不应该依赖于生成的JSON数据列出的顺序。您已经这样做了,但是您应该将它与字典进行比较,而不是新的JSON字符串!
def test_get_ticket(self):
with self.app.test_request_context('/?main_id=14522&user_id=82'):
methodOutput = brain_get_ticket.get_ticket(
{'main_id': {1: 0}, 'status': {'Closed': 0},
'available': {'False': 0}},
"main_id, status, available", ['main_id', 'status', 'available'])
correct_return_output = dict(
to_be_working_on_last_id=0,
to_be_working_on_id=6,
information={'status': {'Closed': 1},
'available': {'False': 1},
'main_id': {1: 1}})
self.assertEquals(
json.loads(methodOutput.data),
correct_return_output,
"output was: {!r}, it should be {!r}".format(
methodOutput.data, correct_return_output))