由于输出中存在长文本,测试失败

Tests fail due to presence of long literal in output

提问人:Tyler Weaver 提问时间:8/15/2023 最后编辑:Tyler Weaver 更新时间:8/15/2023 访问量:22

问:

我的一些测试具有预期响应和实际响应。 实际是来自数据库的响应,它与手动构建的列表进行比较。

代码可以简化为以下内容:

# List of tuples expected
expected = [(1,2,3),(4,5,6),(7,8,9)]

# List of tuples actual. This is a response from the DB. I cannot control the 
# presence of L in the result
actual = repr([(long(1), long(2), long(3)),(long(4),long(5),long(6)),(long(7),long(8),long(9))])

# print(actual): [(1L,2L,3L),(4L,5L,6L),(7L,8L,9L)]
print(actual)

assert expected == actual

在这种情况下,我希望期望等于实际,因为除了 L 字面之外,元组是相同的。然而,事实并非如此。

-  (1, 2, 3),
+  (1L, 2L, 3L),
?    +   +   +

我的问题是:如何在不为每个预期条目放置演员的情况下解决这个问题?long(<entry>)

我尝试使用 json 模块从数据库加载结果,但 json.loads 失败,因为它与有效的 JSON 不匹配。由于缺少逗号,它抱怨。

我尝试过使用 eval(actual),但它的结果是一样的。

我最后尝试使用 for 循环来遍历条目(徒劳地尝试使用 eval(loop_entry),但它导致拆分列表,就好像它是一个字符串一样。

我知道在我预期的作品中的每个条目中使用,但是当有很多行,每行都有很多条目时,这很麻烦。long(value)

列表 蟒蛇-2.7 pytest 断言

评论

0赞 MrBean Bremen 8/15/2023
问题是你的结果实际上是一个字符串(由于),要将其与数字进行比较,你必须解析那里的数字。类似的东西会给你一个数字元组,只需简单地从数字中剥离“L”字符。不太好,但应该可以工作......reprtuple([int(x[:-1]) for x in actual[1:-1].split(", ")])

答: 暂无答案