我有一个CI设置,它在Python版本>= 3.7以及Ubuntu和macOS系统上运行测试。我有一个测试,似乎随机失败,我想知道它是否与无序集如何存储在不同系统的内存中有关。该错误是一个失败,其中正确地引发了警告,但它与预期的警告消息不匹配,因为它显示的正则表达式模式与set对象的不同顺序打印在一起。我想知道是否有更好的方法来比较无序集,当它们作为对象插入到f字符串正则表达式中时。
为了清楚起见,我测试了以下函数:
def check_items(item):
my_set = {True, False, "item1", "item2", "item3"}
if item not in my_set:
raise ValueError(
f"Parameter reorder needs to be one of {my_set}."
)
return item
在一个单独的测试文件中,我有以下测试
import pytest
my_set = {True, False, "item1", "item2", "item3"}
def test_check_items_error():
with pytest.raises(
ValueError,
match=f"Parameter reorder needs to be one of {my_set}"
):
check_items("new")
测试失败的原因是
AssertionError: Regex pattern did not match.
Regex: "Parameter reorder needs to be one of {False, True, 'item1', 'item2', 'item3'}"
Input: "Parameter reorder needs to be one of {False, True, 'item2', 'item1', 'item3'}."
什么是最安全的方法来确保相同的无序集在这个设置中正确匹配,它们被插入到f字符串中?
1条答案
按热度按时间vbopmzt11#
我们可以通过对每个set元素的repr进行排序来“规范化”set。这样,结果将按顺序排列:
在这种情况下,无论你如何订购你的一套,消息将出来是