最近学了一段时间的TDD,从最开始的摸不着头脑,到现在的略懂,有一些学习的TDD心得,跟大家分享一下,希望对初学TDD的你有所帮助。
1.什么是TDD:TDD测试驱动开发(Test-driven development)是极限编程中倡导的程序开发方法,以其倡导
先写测试程序,然后编码实现其功能得名。测试驱动开发始于20世纪90年代。测试驱动开发。测试驱动开发的目的是取得快速反馈并使用“illustrate the main line”方法来构建程序。
测试驱动开发是戴两顶帽子思考的开发方式:先戴上实现功能的帽子,在测试的辅助下,快速实现其功能;再戴上重构的帽子,在测试的保护下,通过去除冗余的代码,提高代码质量。测试驱动着整个开发过程:
首先,驱动代码的设计和功能的实现;其后,驱动代码的再设计和重构。 --摘自维基百科
说通俗点就是:先测试-再实现功能-最后重构。
2.TDD的流程是什么?举个例子:顾客要定制一个1m长,0.8m宽,0.5m高的蓝色玻璃水缸,商家做好后就交给顾客验收,验收不合格就需要改装,直到验收通过。测试也是一个道理,顾客需求就是测试文件,制作过程就相当于写功能实现代码。功能代码写好后就按照测试文件(顾客需求)进行测试,测试不通过就修改功能实现代码(改装),直至测试通过(验收)就可以啦!
3.jasmine:javascript的测试框架有很多种,我用的是jasmine,下载地址是:
https://github.com/pivotal/jasmine/archive/master.zip。参考jasmine的官方文档:
http://jasmine.github.io/edge/introduction.html。
jasmine下载后解压某个版本(2.0.1),打开工程,再打开dist/jasmine-standalone-2.0.1/spec,spec就是测试的代码文件,同目录下src文件夹下的js文件就是功能实现的代码文件。怎么知道测试有没有通过呢?用浏览器打开src下的SpecRunner文件(鼠标移动至页面又上方,会自动显示浏览器图标),就会在浏览器上显示测试的结果,如:3 specs, 0 failures。当然,首先需要在SpecRunner.html上添加你新建的js文件路径。
4.jasmine语法的简单介绍:打开spec/PlaySpec.js文件,可以看到一个关于播放器的测试,浏览一下整个文件,你可能会注意到,整个JS文件都是由
describe() beforeEach() it() 和
expect() 联系起来的。这几个方法就是测试最重要的部分。我截取一部分讲一下测试的基本语法:
describe("Player", function() {
var player;
var song;
beforeEach(function() {
player = new Player();
song = new Song();
});
it("should be able to play a Song", function() {
player.play(song);
expect(player.currentlyPlayingSong).toEqual(song);
//demonstrates use of custom matcher
expect(player).toBePlaying(song);
});
describe()和it()是什么:顾客验收的时候,要测水缸(water_jar)的大小是否符合要求,就需要分别测量水缸的长宽高。所以对应的,it()就是每个具体的小测试,比如测量水缸的长/宽/高,describe()是一个或多个it()的集合,如水缸的大小,就需要三个it()。describe()也可以相互嵌套。describe和it都接收两个参数,第一个参数是描述语句,表明测试的是什么内容。第二个参数是function(),就是具体测试怎么实现。
怎么知道测量结果符不符合要求呢?就拿测量结果与预期值进行比较,也就是expect()方法。expect()接受两个参数,第一个参数是实际的测量值,第二个参数是你的预期值。如果两者相等的话,测试就会通过(green),否则就是(red)。除了
.toEqual()外,还有 .toBe(), .toMatch(), .toBeDefined() 可以根据需要选择。比如刚才的水缸测试,我要测试水缸的大小,那么大概的框架就是:
describe("water_jar size",function(){
it("should be 1m long",function(){
var water_jar = new WaterJar();
expect(water_jar.length()).toEqual(1); //预期水缸的长度应该为1m
});
it("should be 0.8m width",function(){
var water_jar = new WaterJar();
expect(water_jar.width()).toEqual(0.8);
});
it("should be 0.5m height",function(){
var water_jar = new WaterJar();
expect(water_jar.height()).toEqual(0.5);
});
})
你可能会注意到,每个it()都需要创建一个新的water_jar实例。能不能只创建一个实例呢?这时候
beforeEach() 就出来啦。顾名思义,beforeEach:在每个(测试)之前。所以就可以把初始化放在 beforeEach() 里面:
beforeEach(function(){
var water_jar = new WaterJar();
})
这样每次测试开始前就会新建一个实例。可是如果测试数量足够多的话,就会造成内存使用过多。所以只新建一次变量,以后每个测试对新建的变量赋值,就可以大大降低内存的使用率。
describe("water_jar size",function(){
var water_jar; //定义变量
beforeEach(function(){
water_jar = new WaterJar(); //每次测试开始前都对变量进行赋值
})
it("should be 1m long",function(){ //测试长度是否为1m
expect(water_jar.length()).toEqual(1);
});
it("should be 0.8m width",function(){ //测试宽度是否为0.8m
expect(water_jar.width()).toEqual(0.8);
});
it("should be 0.5m height",function(){ //测试高度是否为0.5m
expect(water_jar.height()).toEqual(0.5);
});
})
再看看上面播放器的测试,你是不是能大概看懂了呢?
下一步就可以写你的实现代码啦。通过测试后就可以重构了。
分享到:
相关推荐
在IT行业中,测试驱动开发(Test-Driven Development, TDD)是一种编程实践,它强调先编写测试用例,然后再编写实现这些测试通过的代码。...这个项目提供的示例和练习可以帮助初学者掌握如何在AngularJS环境中实施TDD。
10. **尝试try-tdd-master**:这个压缩包可能包含了一个练习项目,用于指导初学者实践TDD。它可能包括已设置好的测试用例、待实现的函数或模块,以及可能的解决方案或示例。 通过参与这样的练习,你可以深入了解TDD...
- 学习曲线:对于初学者,理解如何编写有效的测试和遵循TDD流程可能需要时间。 - 测试过度:有时可能会写出过于复杂的测试,导致维护负担增加。 综上所述,"kata-tdd-1-Tran-Anh-Tai"项目为开发者提供了一个实践...
1. **创建测试框架**:开始时,你需要选择或创建一个JavaScript测试框架,如Jasmine、Mocha或 Jest,这些框架提供了断言库和测试运行器,使得编写和运行测试变得简单。 2. **编写失败的测试**:根据Kata的具体任务...
**TDD(测试驱动开发)**是一...这个演示将帮助初学者理解TDD的基本原理,同时也为有经验的开发者提供了一种复习和提高TDD技能的方式。通过实际操作,参与者可以更好地掌握TDD的实践过程,从而提升自己的软件开发能力。
**测试驱动开发(Test-Driven Development,TDD)**是一种软件开发方法,它要求开发者在编写实际代码之前先编写测试用例。在这个名为“tddTemplate”...对于初学者来说,这是一个很好的起点,了解和实践TDD的最佳实践。
【标题】"workshopJs2015"是一个关于JavaScript的训练营,专注于教导初学者如何启动TDD(测试驱动开发)项目,并建立有效的工作流程。这个活动旨在帮助开发者建立起以测试为中心的编程习惯,从而确保代码的质量和可...
6. **测试驱动开发(TDD)**:此项目强调了TDD的理念,即先写测试,再编写满足测试的代码。这种方式有助于提前发现潜在的逻辑错误,提高代码质量。 7. **代码覆盖率**:Jasmine可以与其他工具配合,如Istanbul,来...
【标题】"feedreader_jasmine"是一个基于JavaScript的项目,主要展示了如何运用Jasmine测试框架进行前端应用的单元测试和集成测试。这个程序的核心目的是确保代码的健壮性和可维护性,通过自动化测试来验证各个功能...
### 实践测试驱动开发(TDD)使用C# 7 #### 标题与描述解析 本书《Packt.Practical.Test-Driven Development using C# 7.2018》聚焦于通过...无论是初学者还是有经验的开发者,都可以从中获得有价值的信息和启示。
**标题与描述解析** 标题中的"stopwatch-tdd"指的是一个使用了测试驱动开发(TDD)方法的秒表...对于初学者来说,这是一个很好的机会去学习如何结合测试和实际功能开发,同时也能够提升对Javascript和前端开发的理解。
Jasmine 是一个广泛使用的 JavaScript 测试框架,而 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,常用于服务器端开发。"一个简单的应用程序" 提示我们这是一个入门级的实践项目,适合初学者了解这两...
4. **测试驱动开发(TDD)**:书中可能会介绍TDD的工作流程,即先写测试,再编写满足测试的代码。这种方式有助于设计出更健壮、易于维护的代码。 5. **集成测试**:除了单元测试,还可能涉及集成测试,以检查不同组件...
茉莉花的结构基于"规范"(specs),每个规范都是一个独立的测试单元,可以包含多个"期望"(expectations)。期望定义了测试的条件,如果满足则测试通过,否则测试失败。例如: ```javascript describe('Calculator'...
8. **单元测试与端到端测试**:AngularJS的测试工具如 Karma 和 Jasmine,可以帮助开发者编写和运行测试,确保代码质量。书中可能会涉及测试驱动开发(TDD)的最佳实践。 9. **AngularJS与其他技术的集成**:如与...
**正文** "Pacman:吃豆人JavaScript...这个项目不仅适合初学者提升JavaScript技能,也适合有经验的开发者学习游戏开发和TDD实践。通过分析和修改代码,你可以深入到JavaScript的细节中,同时享受复现经典游戏的乐趣。
通过茉莉花实验室的实践,学员不仅能够深入理解JavaScript编程,还能掌握测试驱动开发(TDD)和BDD的理念,提升代码质量和项目可靠性。这是一个绝佳的学习资源,无论对于初学者还是有经验的开发者,都能从中受益。在...
这个练习通常用JavaScript实现,因为JavaScript是广泛应用且易于学习的脚本语言,适合初学者和经验丰富的程序员进行练习。 首先,我们要理解保龄球游戏的规则。一个完整的保龄球游戏由10局组成,每局有两次投球机会...
测试框架如Jasmine、Mocha和QUnit等,提供了丰富的API来编写测试用例,而UMB迷你测试可能是这些框架的一个简化版本,专为小型项目或初学者设计。 1. **基本概念**: - **测试驱动开发(TDD)**:这是一种编程实践,...