测试重要的实施细节

时间:2014-08-12 13:58:43

标签: unit-testing

我正在实现一个key -> value关联容器。在内部,它是一个已排序的二叉树,我想确保它是平衡的,以便find操作肯定是Olog(n)。问题是这是一个完全私有的实现细节,我不能从外面测量它。

我能想到的最好的事情就是对我的find操作进行基准测试 - 如果它们在线性时间内运行,可能是因为树是不平衡的 - 但这似乎太不精确了,如果我感觉更好有更直接的衡量方法。

哪些设计/测试模式可能会在这些情况下有所帮助?

2 个答案:

答案 0 :(得分:3)

您可以将平衡树提取到它自己的类,并测试该类。在该类中,平衡性是类的一个特征,可以暴露出类似深度的东西,可以让你检查它并断言树保持平衡。

答案 1 :(得分:0)

您说您正在测试实施细节是正确的。这里的问题是糟糕的实现也会产生正确的输出,只需要更长的时间。这意味着唯一可测量的单位是时间。

我会做的与你的建议类似:创建一个大的数据集合并以一种良好的实现应该能够在瞬间和糟糕的实现中找到你正在寻找的东西的方式构建它在找到它之前必须经过你的整个系列。

这可能转化为拥有数千个元素并搜索最后一行的元素。您可以通过一种好的实现方式来构建它,以便在树的顶部找到它并因此很快找到它,而不好的实现应该在底部的某处找到它,因此需要时间来找到它。

许多框架都有一个指定超时的选项,所以如果你将它设置为足够低的值并且你的集合中有足够的数据,你就可以清除那些运行缓慢的实现。