A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庭院深深深几许 金牌黑马   /  2019-4-19 09:56  /  971 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1.实现函数checkNumber:
  该函数的目的是检查形式参数的字符串是否可以被转化为一个数字,所以返回值也非常简单,能则返回true,不是则返回false,代码如下:
[JavaScript] 纯文本查看 复制代码
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。所以,有没有一种更好的方法可以帮助我们更快的完成测试呢?

  我们来看看下面这段代码,看看是否可以提高我们的测试速度,特别是当我们对代码进行改动后我们需要快速验证代码是否生效时:
[JavaScript] 纯文本查看 复制代码
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



  当我们执行上述代码时,运行结果如下:
[JavaScript] 纯文本查看 复制代码
true true true true true true true false true true false false false false

  我们将上述输出结果与我们的期望返回值进行比较,如果发现是一致的,说明我们的代码是没有问题的。当然,对于我们自己开发的代码,大家一定要树立测试意识,测试并不只是测试工程师的事,这个想法是完全错误的,简单来说,就是我们必须要对自己的代码负责。
  我们已经将该代码深入到这个程度了,我们不妨继续深入下去,基于这样一种自动输出测试结果,并通过人工对比来进行判断的测试方法,有没有更方便的做法呢?答案是肯定的。

  既然我们可以自动调用checkNumber函数来观察其针对不同的形式参数返回不同的值来确定代码是否工作正常,那么我们也完全可以将该比对过程用代码来实现,以达到自动化测试的目的。如果要完成这一过程,我们需要首先创建一个“测试驱动程序”,英文叫:Test Driver或Test Fixture,代码如下:

[JavaScript] 纯文本查看 复制代码
function testCheckNumber(value, expect){
    var actual = checkNumber(value);
    if(actual == expect)
        document.write("测试结果:正确.<br>");
    else
        document.write("测试结果: 错误.<br>");
}


  测试驱动程序的目的主要完成三件事情:定义期望结果,调用被测试函数,对比实际结果以得出结论。上述代码的简单几行主要在完成这件事情,其中期望结果由形式参数expect给出。有了这样的驱动程序后,我们对实际的测试代码进行改造,如下:
[JavaScript] 纯文本查看 复制代码
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);



  运行上述自动化测试代码,输出结果如下:
[JavaScript] 纯文本查看 复制代码
测试结果:正确.
测试结果:正确.
测试结果:正确.
测试结果:正确.
测试结果:正确.
测试结果:正确.
测试结果:正确.
测试结果:正确.
测试结果:正确.
测试结果:正确.
测试结果:正确.
测试结果:正确.
测试结果:正确.
测试结果:正确.


从运行结果可以看出,我们的被测试代码(即checkNumber函数)是工作正常的。当然,大家也可以故意将checkNumber函数的某些代码改错,我们看看该自动化测试程序能否正常检测到错误。
这就是基于代码级的自动化测试技术,此处我们利用的这种测试技术也被称之为:TDD,即Test-Driven Development,测试驱动开发。这是非常流行的一种敏捷开发方法论。






  传智的web前端培训课程一直紧随市场发展脚步,实时更新前沿、深度、覆盖面广的前端课程。
  传智全新升级的前端与移动开发课程新增了大热的小程序+小游戏、人脸识别、机器学习、大数据可视化等前沿技术,还加入了前所未有的全终端大型项目,让学员通过一个大型项目掌握从需求到开发再到上线部署的各项技能,为学员高薪就业增加砝码。
  更多的相关web前端培训课程请访问:http://www.itcast.cn/web/


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马