多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
#### 1.3 测试函数、用例和套件(2) 到目前为止,这些测试都很清晰简单,每个测试都只用了一个断言。现在,上面的测试用例把所有的测试都组合进了一个对象,但是,由于这个date对象还是在外部创建的,所以这让事情看起来不太自然,因为它似乎应该是测试的一部分。当然,我们确实可以在每个测试中都创建一个对象,但因为创建这些对象的方式完全相同,所以这样就等于重复做了很多遍同样的事情,而这并不是必要的。所以,更好的选择是把通用的设置代码都放在一个单独的地方。 Setup和Teardown 在xUnit框架里通常会提供setUp(设置)和tearDown(拆除)方法,用来集中设置并提供测试数据,也叫测试配件文件,所以,它们通常会在每个测试之前和之后分别调用。下面,让我们用SetUp方法把date对象加进来作为一个测试配件文件。正如清单1.12显示的,更改过的testCase函数检查测试用例是否有setUp和tearDown,如果有的话,在适当的时候运行它们。 清单1.12 在testCase里实现setUp和tearDown ~~~ function testCase(name,tests){ assert.count =0; var successful =0; var testCount =0; var hasSetup =typeof tests.setUp =="function"; var hasTeardown =typeof tests.tearDown =="function"; for (var test in tests){ if (!/^test/.test(test)){ continue; } testCount++; try { if (hasSetup){ tests.setUp(); } tests [test ](); output(test,"#0c0"); if (hasTeardown){ tests.tearDown(); } //If the tearDown method throws an error,it is //considered a test failure,so we don't count //success until all methods have run successfully successful++; } catch (e){ output(test +"failed:"+e.message,"#c00"); } } var color =successful ==testCount ?"#0c0":"#c00"; output("<strong>"+testCount +"tests,"+ (testCount -successful)+"failures</strong>", color); } ~~~ 用新加的setUp方法,我们可以增加一个对象属性来存放测试配件文件,如清单1.13所示。 清单1.13 在strftime测试用例中使用setUp ~~~ testCase("strftime test",{ setUp:function (){ this.date =new Date(2009,9,2,22,14,45); }, "test format specifier Y":function (){ assert("%Y should return full year", this.date.strftime("%Y")==2009); }, //... }); ~~~