如何对数据结构的内部(组织)进行单元测试?

时间:2010-04-05 13:45:28

标签: unit-testing data-structures

我已经开始研究一个小型ruby项目,该项目将包含许多不同数据结构和算法的示例实现。现在只是让我刷新我暂时没做过的事情,但我希望它有点像Ruby Koans,有一堆为数据结构编写的单元测试,但实现为空(在另一个分支中完全实现)。然后它可以用作一个很好的学习工具或代码kata。

但是,我无法想出一个编写测试的好方法。我不能只测试公共行为,因为这不一定会告诉我实施情况,这在这里很重要。例如,普通BST和红黑树的公共接口将是相同的,但RB树具有非常特定的数据组织要求。我该如何测试?

2 个答案:

答案 0 :(得分:1)

不确定你要做什么,但是如果你想为各种数据结构提供通用接口,然后可以通过各种方式进一步实现和/或专业化,我看不出你如何编写任何具体的测试实施尚不存在。

您可以编写公共接口的测试,以确保所有实现都满足该接口指定的合同。例如。排序树的所有实现都应该正确地排序它们的元素等。作为旁注,这实际上不是单元测试,而是功能/验收测试。

对于红黑树,您可以编写一套附加(可选)测试,以验证在插入和插入后树正确重新排序。删除。这个可以并且应该通过公共接口进行测试。例如。向树中添加一系列元素,使树不平衡而不重新排序,然后检查树结构以确保它正确地重新排序。

答案 1 :(得分:1)

测试类的实际实现通常是个坏主意。你可以更好地测试课堂上每种方法的合同。

考虑一下:如果公共接口是相同的,那么无论实现如何,单元测试都不会相同吗?

数据结构(在Java中)的单元测试的一个很好的例子是Google Collections framework。它有大约35,000个。请注意,它们都没有测试内部实现:而是验证每个方法和类的合同。