我正在使用Pytest来测试我的团队以编程方式运行的一些SQL查询。
我的SQL查询是JSON列表-一个JSON对应于一行数据。
我有一个函数可以区分JSON key:value对,以便我们可以精确地指出给定行中哪些值不同。理想情况下,我将输出assert语句的标准输出的这些差异 的列表,最终对于最终用户而言看起来很笨拙且用处不大。
答案 0 :(得分:0)
Pytest给了我们pytest_assertrepr_compare
这个钩子,以添加有关断言失败原因的自定义说明。
您可以创建一个用于包装JSON字符串的类,并实现重载equal运算符的比较器算法。
class JSONComparator:
def __init__(self, lst):
self.value = value
def __eq__(self, other):
# Here your algorithm to compare two JSON strings
...
# If they are different, save that information
# We will need it later
self.diff = "..."
return True
# Put the hook in conftest.py or import it in order to make pytest aware of the hook.
def pytest_assertrepr_compare(config, op, left, right):
if isinstance(left, JSONComparator) and op == "==":
# Return the diff inside an array.
return [left.diff]
# Create a reference as an alias if you want
compare = JSONComparator
def test_somethig():
original = '{"cartoon": "bugs"}'
expected = '{"cartoon": "bugs"}'
assert compare(original) == expected