python - 如何强制命令无序(用于测试)?

标签 python python-3.x unit-testing

我刚刚花了半天时间来追踪一个 bug 到一个我在迭代它时忘记排序的 dict。即使那部分代码已经过测试,但测试并没有将其提取出来,因为该字典在测试期间具有可重复的排序。 只有当我打乱字典时,测试才会失败!(我使用了一个中间的 random.shuffle 列表并构建了一个 OrderedDict) p>

这让我有点害怕,因为可能到处都有类似的错误!

有没有办法在测试期间全局强制所有指令无序?

更新:我想我至少弄清楚了导致错误的原因。如上所述here ,带有 int 键的字典通常是排序的,但可能并不总是这样。我的假设:在我的测试中,整数总是很小(10 阶),因此总是有序的。然而,在实际运行中,整数要大得多(10^13 阶),因此并不总是有序的。我能够在交互式 session 中重现此行为:list(foo.keys()) == sorted(foo.keys()) 对于小键总是 True ,但不是每个具有非常大键的字典。

最佳答案

截至 3.6,dicts maintain key insertion order .如果您希望它们以特定方式运行,您可以创建一个继承自 dict 的类,并为其赋予您想要的行为(例如,确保它在返回键列表之前对其进行洗牌)。

无论您使用哪个版本的 python,如果您想尝试依赖 dict 实现的特定行为,请务必检查实现细节。更好的是,为了可移植性,只需编写一个解决方案,确保它们按您预期的方式运行,如我上面提到的那样,或者通过对键列表使用随机播放,或其他方式。

关于python - 如何强制命令无序(用于测试)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45572938/

相关文章:

java - Vertx.io 应用程序的单元测试

java - Mockito stub 方法以返回类的所有实例的值

java - 为被测依赖类创建 stub

python - Keras/Tensorflow 中带有 if 语句的自定义损失函数

python - 无法确定 NumPy 数组的切片索引

python - 无需下载即可查找在线视频的视频尺寸

python - Django:类型错误:实例(模型对象)之间不支持 '<'

python - 从python的日志文件中读取数据

python - 在 GoogleAppEngine 中从文件生成 json 的正确方法是什么?

python __getattribute__ 返回类变量属性时出现RecursionError