多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
#### 1.3 测试函数、用例和套件(1) 我们目前所构建的测试中已经有了几个断言,但是这里存在一个问题,由于测试失败时assert函数只是简单地抛出错误,所以我们没法知道出错的测试之后的测试是失败还是成功。所以,如果我们想得到更细致的反馈,可以把测试组织成测试函数。如此一来,每个测试函数就只执行一个单元,但可以调用一个或多个断言。如果我们还想要进一步得到完全的控制,还可以要求一个测试只测试某个单元的一个特定的行为。这意味着每个单个函数都会有多个简练而明了的测试,而且,当它们被作为一个整体测试时也能提供很精确的反馈。 我们把一组相关的测试函数或方法叫做一个测试用例,就strftime函数来说,我们可以为整个函数设计一个测试用例,让每个测试通过一个或多个断言来测试函数的某个特定的行为。在更复杂的系统里,测试用例被进一步组织成测试套件。清单1.10列出了一个很简单的testcase函数。它接受一个字符串名(name)和一个带测试方法的对象。每个名字以“test”开头的属性都被当成测试方法来运行。 清单1.10 一个简单的testcase函数 ~~~ function testCase(name,tests){ assert.count =0; var successful =0; var testCount =0; for (var test in tests){ if (!/^test/.test(test)){ continue; } testCount++; try { tests [test ](); output(test,"#0c0"); successful++; }catch (e){ output(test +"failed:"+e.message,"#c00"); } } var color =successful ==testCount ?"#0c0":"#c00"; output("<strong>"+testCount +"tests,"+ (testCount -successful)+"failures</strong>", color); } ~~~ 清单1.11用testcase把strftime的测试重新组织成一个测试用例。 清单1.11 strftime测试用例 ~~~ var date =new Date(2009,9,2); testCase("strftime test",{ "test format specifier %Y":function (){ assert("%Y should return full year", date.strftime("%Y")==="2009"); }, "test format specifier %m":function (){ assert("%m should return month", date.strftime("%m")==="10"); }, "test format specifier %d":function (){ assert("%d should return date", date.strftime("%d")==="02"); }, "test format specifier %y":function (){ assert("%y should return year as two digits", date.strftime("%y")==="09"); }, "test format shorthand %F":function (){ assert("%F should act as %Y-%m-%d", date.strftime("%F")==="2009-10-02"); } }); ~~~