共计 2835 个字符,预计需要花费 8 分钟才能阅读完成。
1. 实现函数 checkNumber:
该函数的目标是查看形式参数的字符串是否能够被转化为一个数字,所以返回值也非常简单,能则返回 true,不是则返回 false,代码如下:
function checkNumber(value) {
var m = 0; // 统计负号的个数
var n = 0; // 统计小数点的个数
for(var i=0; i<value.length; i++){var c = value.charCodeAt(i); // 获取每个字符的 ASCII 码
// 通过 ASCII 码查看,如果字符不为 0~9 的数字或者负号或者小数点,则有效
if ((c >= 0 && c < 45) || c > 57 || c == 47)
return false;
if(c == 45) m++;
if(c == 46) n++;
}
if(m > 1) return false;
if(n > 1) return false;
// 如果存在一个负号,而负号不在第一个地位,则有效
if(m == 1 && value.charCodeAt(0) != 45) return false;
// 如果存在一个小数点,而小数点在最初一个地位,则有效
if(n == 1 && value.charCodeAt(value.length-1) == 46) return false;
return true;
}
上述针对字符串判断的函数因为咱们须要测试的输出 www.sangpi.com 状况十分多,所以如果每次咱们都须要手工输出来进行测试的话,那么每当咱们批改一点代码后,将会消耗很多工夫来进行测试以保障代码没有 Bug。所以,有没有一种更好的办法能够帮忙咱们更快的实现测试呢?
咱们来看看上面这段代码,看看是否能够进步咱们的测试速度,特地是当咱们对代码进行改变后咱们须要疾速验证代码是否失效时:
document.writeln(checkNumber(“12345”)); // true
document.writeln(checkNumber(“012345”)); // true
document.writeln(checkNumber(“-12345”)); // true
document.writeln(checkNumber(“-1.2345”)); // true
document.writeln(checkNumber(“12.345”)); // true
document.writeln(checkNumber(“0.12345”)); // true
document.writeln(checkNumber(“-0.12345”)); // true
document.writeln(checkNumber(“12345.”)); // false
document.writeln(checkNumber(“.12345”)); // true
document.writeln(checkNumber(“-.12345”)); // true
document.writeln(checkNumber(“.12-345”)); // false
document.writeln(checkNumber(“..12345”)); // false
document.writeln(checkNumber(“..–12345”)); // false
document.writeln(checkNumber(“–12.345.”)); // false
当咱们执行上述代码时,运行后果如下:
true true true true true true true false true true false false false false
咱们将上述输入后果与咱们的冀望返回值进行比拟,如果发现是统一的,阐明咱们的游戏代码是没有问题的。当然,对于咱们本人开发的代码,大家肯定要建立测试意识,测试并不只是测试工程师的事,这个想法是齐全谬误的,简略来说,就是咱们必须要对本人的代码负责。
咱们曾经将该代码深刻到这个水平了,咱们无妨持续深刻上来,基于这样一种主动输入测试后果,并通过人工比照来进行判断的测试方法,有没有更不便的做法呢?答案是必定的。
既然咱们能够主动调用 checkNumber 函数来察看其针对不同的形式参数返回不同的值来确定代码是否工作失常,那么咱们也齐全能够将该比对过程用代码来实现,以达到自动化测试的目标。如果要实现这一过程,咱们须要首先创立一个“测试驱动程序”,英文叫:Test Driver 或 Test Fixture,代码如下:
function testCheckNumber(value, expect){
var actual = checkNumber(value);
if(actual == expect)
document.write("测试后果:正确.<br>");
else
document.write("测试后果: 谬误.<br>");
}
测试驱动程序的目标次要实现三件事件:定义冀望后果,调用被测试函数,比照理论后果以得出结论。上述代码的简略几行次要在实现这件事件,其中冀望后果由形式参数 expect 给出。有了这样的驱动程序后,咱们对理论的测试代码进行革新,如下:
testCheckNumber(“12345”, true);
testCheckNumber(“012345”, true);
testCheckNumber(“-12345”, true);
testCheckNumber(“-1.2345”, true);
testCheckNumber(“12.345”, true);
testCheckNumber(“0.12345”, true);
testCheckNumber(“-0.12345”, true);
testCheckNumber(“12345.”, false);
testCheckNumber(“.12345”, true);
testCheckNumber(“-.12345”, true);
testCheckNumber(“.12-345”, false);
testCheckNumber(“..12345”, false);
testCheckNumber(“..–12345”, false);
testCheckNumber(“–12.345.”, false);
运行上述自动化测试代码,输入后果如下:
测试后果:正确.
测试后果:正确.
测试后果:正确.
测试后果:正确.
测试后果:正确.
测试后果:正确.
测试后果:正确.
测试后果:正确.
测试后果:正确.
测试后果:正确.
测试后果:正确.
测试后果:正确.
测试后果:正确.
测试后果:正确.
从运行后果能够看出,咱们的被测试代码(即 checkNumber 函数)是工作失常的。当然,大家也能够成心将 checkNumber 函数的某些代码改错,咱们看看该自动化测试程序是否失常检测到谬误。
这就是基于代码级的自动化测试技术,此处咱们利用的这种测试技术也被称之为:TDD,即 Test-Driven Development,测试驱动开发。这是十分风行的一种麻利开发方法论。