分分28官网|分分28开奖网

实验:JS函数应用与TDD测试驱动开发
作者:强官涛   类型:Web前端    类别:实验   日期:2018-10-29    阅读:1980 次   消耗积分:0 分

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;
}

 

上述针对字符串判断的函数由于我们需要测试的输入情况非常多,所以如果每次我们都需要手工输入来进行测试的话,那么每当我们修改一点代码后,将会耗费很多时间来进行测试以保证代码没有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 DriverTest 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,测试驱动开发。这是非常流行的一种敏捷开发方法论。






为了答谢大家对蜗牛学院的支持,蜗牛学院将会定期对大家免费发放干货,敬请关注蜗牛学院的官方微信。


20181009_153045_341.jpg


版权所有,转载本站文章请注明出处:蜗牛学院在线课堂, http://www.mountsinaibaptistchurch.org/note/206
上一篇: 实验:JS+定时器实现随机飘雪特效
下一篇: 实验:JS实现HTML在线计算器
提示:登录后添加有效评论可享受积分哦!