Unit testing 访谈-测试值

Unit testing 访谈-测试值,unit-testing,computer-science,Unit Testing,Computer Science,好的,让我们假设我有一个函数,它检查给定数组中哪个是重复次数最多的数 然后需要对该函数进行测试,并且需要使用特定的值进行测试,以确保该函数正常工作(单元测试)-这些值是什么?我很困惑 p.s为什么我需要使用这些值,为什么我不能调试代码,或者,把它写在纸和笔上,看看结果应该是什么,然后与输出的值匹配?这些值是测试值。在您的示例中,您可能有一个最常出现[1,2,2,3]的数组,一个有一个结[1,1,2,2,3]的数组,以及一个空数组[],用于测试最有趣的边缘情况。这些值是测试值。在您的示例中,您可能

好的,让我们假设我有一个函数,它检查给定数组中哪个是重复次数最多的数

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


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

这些值是测试值。在您的示例中,您可能有一个最常出现[1,2,2,3]的数组,一个有一个结[1,1,2,2,3]的数组,以及一个空数组[],用于测试最有趣的边缘情况。

这些值是测试值。在您的示例中,您可能有一个最常出现[1,2,2,3]的数组,一个有一个并列[1,1,2,2,3]的数组,还有一个空数组[]来测试最有趣的边情况。

角情况

*它能处理负片吗*

Array = [-5, -5, -5, 5, 5, 5, 5] expected : 5
Array = [-5, -5, -5, -5, 5, 5, 5] expected : -5
它如何处理模棱两可的情况

它如何处理任意大的整数

它如何处理任意大的数组

为什么单元测试而不仅仅是调试

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

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

3.)对于此特定功能,手动计算很容易。但是如果你在计算一个函数的雅可比矩阵的确定值呢?你真的不想在纸上这么做,是吗

4.)在企业环境中,形式化测试可防止团队在关键时刻偷工减料,这可能会对公司造成严重损害,净总和将增加开发时间,而不是由于降低代码的稳定性而减少开发时间

角落案例

*它能处理负片吗*

Array = [-5, -5, -5, 5, 5, 5, 5] expected : 5
Array = [-5, -5, -5, -5, 5, 5, 5] expected : -5
它如何处理模棱两可的情况

它如何处理任意大的整数

它如何处理任意大的数组

为什么单元测试而不仅仅是调试

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

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

3.)对于此特定功能,手动计算很容易。但是如果你在计算一个函数的雅可比矩阵的确定值呢?你真的不想在纸上这么做,是吗


4.)在企业环境中,形式化测试可防止团队在关键时刻偷工减料,这可能会对公司造成严重损害,净总和将增加开发时间,而不是由于降低代码的稳定性而减少开发时间

我假设单元测试用例在面试问题中提供了必要的值。@Tejs不,它只是你可以使用什么值。。显然有特定的值如果你知道你必须为特定的值编写特定的测试用例,那么我不确定你的问题是什么。我假设单元测试用例在面试问题中提供了必要的值。@Tejs不,这只是你可以使用什么值。。显然有特定的值如果你知道有特定的测试用例你必须为特定的值编写,我不确定你的问题是什么。但问题是,他们实际上没有给我任何测试用例。只是,我有一个函数可以在数组中查找最常见的数字,我可以使用什么/测试值/来检查函数是否正常工作?所以在我的头脑中,我假设,d={4,4,2,1,0}=4;但是他们不喜欢这个答案,这个想法不是只尝试一个。这个想法是试图故意破坏算法。扔掉你能想到的所有可能导致错误的东西。如果你不能故意打破它,那么它在野外被打破的机会就会小得多。这鼓励了那些必须较少重写的健壮算法。但问题是,它们实际上没有给我任何测试用例。只是,我有一个函数可以在数组中查找最常见的数字,我可以使用什么/测试值/来检查函数是否正常工作?所以在我的头脑中,我假设,d={4,4,2,1,0}=4;但是他们不喜欢这个答案,这个想法不是只尝试一个。这个想法是试图故意破坏算法。扔掉你能想到的所有可能导致错误的东西。如果你不能故意打破它,那么它在野外被打破的机会就会小得多。这鼓励了必须较少重写的健壮算法。
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.