好吧,我们假设我有一个函数检查给定数组中哪个是最重复的数字。
然后需要对此功能进行测试,并且需要使用特定值进行测试,以确保功能正常工作(单元测试) - 这些值是什么?我很困惑。
Ps为什么我需要使用这些值,为什么我不能只调试代码,或者在笔和纸上写它以查看结果应该是什么,然后将它与输出的值相匹配?
答案 0 :(得分: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.)对于这个特殊功能,手工操作很容易。但是如果你计算函数的jacobian矩阵的确定性呢?你真的不想在纸上做那件事吗?
4。)在企业环境中,正式化测试可以防止团队在关键时刻偷工减料,这对公司来说非常具有破坏性,并且由于代码稳定性降低,净额将增加开发时间而不是减少开发时间。
答案 1 :(得分:1)
值是测试值。在你的例子中,你可能有一个频繁出现的数组[1,2,2,3],一个带有平局[1,1,2,2,3],一个空数组[]来测试最有趣的边缘情况。