0

好的,假设我有一个函数可以检查给定数组中哪个是重复次数最多的数字。

然后需要测试此功能,并且需要使用特定值进行测试以确保该功能正常工作(单元测试) - 这些值是什么?我很困惑。

Ps 为什么我需要使用这些值,为什么我不能只调试代码,或者,把它写在笔和纸上,看看结果应该是什么,然后将它与输出的值匹配?

4

2 回答 2

4

角落案例。

*它可以处理底片*

Array = [-5, -5, -5, 5, 5, 5, 5] expected : 5
Array = [-5, -5, -5, -5, 5, 5, 5] expected : -5

它如何处理模棱两可的情况

Array = [1,1,1,2,2,2] expected = ?? (See spec for expected)
Array = [1,2,3,4,5,6] expected = ??

它如何处理任意大的整数

Array = [999999999999999, 999999999999999, 999999999999999, -99999999999999999]
expected = 999999999999999;

它如何处理任意大的数组

Array = [0,0] + {i : 1 < i < 9999999999999, i is an int }
expected = 0; 

它如何处理空值

Array = null; 
expected = null; 

Array = [null, 1, 2, 3, 3, 3]
expected = 3;

Array = [null, null, null, 1, 2, 3, 3]
Expected = null or 3 depending on spec. 

为什么要进行单元测试而不仅仅是调试?

1.) 调试假设您知道已经存在错误。如果我们总是通过查看代码就知道所有错误,我们根本不需要测试,我们会不会?

2.) 通常我们对函数规范的未定义区域比代码中的错误更感兴趣。你从来没有告诉我你如何处理数组中的空值......你需要在你的 api '完成'之前在你的规范中指定它

3.) 对于这个特殊的功能,手工操作很容易。但是如果你正在计算一个函数的雅可比矩阵的行列式呢?你真的不想在纸上做那件事吗?

4.) 在企业环境中,形式化的测试可以防止团队在关键时刻偷工减料,这对公司来说是非常有害的,而且由于代码稳定性的降低,净总和会增加而不是减少开发时间。

于 2012-11-05T18:19:09.680 回答
1

这些值是测试值。在您的示例中,您可能有一个包含最频繁出现的数组 [1,2,2,3],一个带有平局 [1,1,2,2,3] 的数组和一个空数组 [] 来测试最有趣的边缘情况。

于 2012-11-05T18:11:45.710 回答