在Python unittest中验证trello board API响应

时间:2017-05-06 23:03:24

标签: json python-3.x python-unittest trello

我正在编写一个查询trello board API的单元测试,并希望断言存在特定的卡片。

第一次尝试是使用/1/boards/[board_id]/lists重新提供,其结果如下:

[{'cards': [
    {'id': 'id1', 'name': 'item1'},
    {'id': 'id2', 'name': 'item2'},
    {'id': 'id3', 'name': 'item3'},
    {'id': 'id4', 'name': 'item4'},
    {'id': 'id5', 'name': 'item5'},
    {'id': 'id6', 'name': 'item6'}],
 'id': 'id7',
 'name': 'ABC'},
 {'cards': [], 'id': 'id8', 'name': 'DEF'},
 {'cards': [], 'id': 'id9', 'name': 'GHI'}]

我想断言' item6'确实在上面提到的名单中。加载json并使用assertTrue,如下所示:

element = [item for item in json_data if item['name'] == "item6"]
self.assertTrue(element)

但是我收到一个错误:' TypeError:JSON对象必须是str,bytes或bytearray,而不是' list'。

然后使用/1/boards/[board_id]/cards请求发现了一个简单的卡片列表:

[
    {'id': 'id1', 'name': 'item1'},
    {'id': 'id2', 'name': 'item2'},
    ...
]

我应该如何编写这个单元测试断言?

1 个答案:

答案 0 :(得分:1)

最新的选择是创建一个类,该类等于您要确保存在的卡的dict,然后在断言中使用它。对于您的示例,使用api返回的卡列表:

Card()

这是class Card(object): """Class that matches a dict with card details from json api response.""" def __init__(self, name): self.name = name def __eq__(self, other): if isinstance(other, dict): return other.get("name", None) == self.name return NotImplemented def __repr__(self): return "{}({!r}, {!r})".format( self.__class__.__name__, self.key, self.value) 助手类的合理实现,看起来有点复杂,但大部分都是直截了当的:

.so

您可以根据需要添加更多字段进行验证。

此时值得一提的一个问题是单元测试是否应该进行真正的api查询。通常,单元测试会将测试数据集中在您控制的功能上,但这可能是使用unittest模块进行trello部署的集成测试吗?