ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
1.2 断言 单元测试的核心部分是断言。所谓断言,则是表达程序设计人员对于系统应达到状态的一种预期。比如,在上一节跟踪调试有问题的“y”格式时,我们实施了手工断言:当strftime方法用在2009年的日期上,用“y”格式时,我们预期它返回字符串“09”。如果没这样返回,那么系统就没有正常工作。断言就宣告失败,测试就随即被中止,我们将会得到测试失败的通知。清单1.7显示了一个简单的assert函数。 清单1.7 简单的assert函数 ~~~ function assert(message,expr){ if (!expr){ throw new Error(message); } assert.count++; return true; } assert.count = 0; ~~~ 这里,assert函数只是检查它的第二个参数是否为真(意即,除了false、null、undefined、0、""和NaN之外的任何值)。如果为真,就把断言计数器加1,否则就抛出错误,以第一个参数作为其错误信息。我们可以在之前的测试中使用assert,如清单1.8所示。 清单1.8 用assert作测试 ~~~ var date =new Date(2009,9,2); try { assert("%Y should return full year", date.strftime("%Y")==="2009"); assert("%m should return month", date.strftime("%m")==="10"); assert("%d should return date", date.strftime("%d")==="02"); assert("%y should return year as two digits", date.strftime("%y")==="09"); assert("%F should act as %Y-%m-%d", date.strftime("%F")==="2009-10-02"); console.log(assert.count +"tests OK"); }catch (e){ console.log("Test failed:"+e.message); } ~~~ 当然,这种方案需要多输入一点点东西,但我们的测试现在实现了自我检查和自我汇报。除了检查测试报告的最终输出外,我们从手工劳动中基本解脱出来了。 红和绿 在单元测试的领域中,通常分别用“红”和“绿”来表示“失败”和“成功”。因为让测试变红或变绿,会使得结果更加容易解释,而我们也可以少花些力气。清单1.9提供了一个简化的输出函数,使用DOM来显示有颜色的消息。 清单1.9 输出有颜色的消息 ~~~ function output(text,color){ var p =document.createElement("p"); p.innerHTML =text; p.style.color =color; document.body.appendChild(p); } //console.log can now be replaced with output(assert.count +"tests OK","#0c0"); //and,for failures: output("Test failed:"+e.message,"#c00"); ~~~