使用无序集合进行Python树形数据结构单元测试

3

背景

我正在构建一种树形数据结构的单元测试(使用Python 3),该数据结构使用无序集合。我正在努力寻找测试我的树类的某些方法的方法。

示例

给定下面所示的树形图...我有一个方法,可以分离一个节点(比如#2),然后选择其中一个子节点(3或4)来代替它,而不是将它们都与节点1关联起来。(在#2是根节点且我们仍希望在丢弃#2时保持3和4相关时,这很有用。)

      1----------+                     2        1----------+
      |          |                              |          |
  +---2---+      |    Detaching Node "2"        3---+      |
  |       |      11        -->                 /|\  |      11
  3       4     /| \                          5 6 7 |     /| \
 /|\     /|\  12 13 14                              4   12 13 14
5 6 7   8 9 10                                     /|\
                                                  8 9 10

问题

集合是无序的,我选择子节点(3和4)的方式是检查节点2是否有子节点,然后从其子节点集合中弹出一个子节点并将其作为所选节点。由于集合是无序的,当我弹出子节点时,在我的测试用例中会得到(看似)随机的结果。

问题

如何测试这样的方法(我已经了解到使用随机模块时的测试困难,但我也知道集合具有某种可预测的顺序)?我应该只是在这个问题周围进行测试吗?还是应该尝试弄清楚集合将被“弹出”的顺序?


2
第一个问题:这种随机行为是否可以接受,也就是说实现是正确的吗? - Eirik M
是的,绝对没问题。对于这个方法,我不在乎它选择哪个子元素,只要它们保持相关即可。 - JakeD
1个回答

1

测试方法是否完成了它应该完成的任务。操作后,正确的节点是否被其子节点之一替换?如果是,太好了!如果没有,则报告失败。

您不需要断言它已被任何特定的子节点替换。


好的观点,我太沉迷于assert equal的酷炫之处,忘记了其他断言方法。其他断言方法也很重要。 - JakeD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接