追求代码质量 - 亲身体验行为驱动开辟[Java编程]
本文“追求代码质量 - 亲身体验行为驱动开辟[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
明显,测试本身是件功德.而在早期举行测试 — 比方在编写代码时 — 则 更有好处,这分外有利于提高代码质量.在开辟早期编写测试,您将获益良多. 您可以查抄代码的行为,并预先对它举行调试,这种动力无疑是宏大的.
即便理解了这种重要性,我们也没有到达关键的一点:使在编写代码之前 编 写测试成为一种尺度实践.正如 TDD 是极限编程(Extreme Programming)的下 一个演变阶段(后者推出了单元测试框架),以 TDD 为底子,新的飞跃也将到 来.本月,我邀请您和我一同实现从 TDD 到更具直观性的行为驱动测试(BDD) 的演变.
行为驱动开辟
固然测试优先编程关于有些人对比管用,但是并不实用于每一个人.固然有 的利用程序开辟人员狂热拥护 TDD,但也有人果断抵抗它.即便目前已经有了很 多测试框架,比方 TestNG、 Selenium 和 FEST,但不对 代码举行测试的来由 仍旧充分.
不采取 TDD 的两个常见来由是 “没有充足的时间举行测试” 和 “代码太 复杂,难以测试”.测试优先编程的另一个障碍是测试优先概念本身.很多人把 测试看做一种反映型活动,仅比抽象具体一点.经验奉告我们,不能测试不存在 的东西.关于某些开辟人员来说,关于这种概念框架,测试优先 是一种冲突的 说法.
但是,假如不考虑编写测试和若何测试,而是考虑行为,后果会若何呢?这 里所说的行为,是指一个利用程序应当 若何运行 — 实际上就是指它的标准.
实际上,您已经想到了这种办法.我们都想到过.请看下面的对话.
Frank: 什么是栈?
Linda: 它是一种数据构造,按先进后出(或后进先出 )的方法汇集对象.它普通有一个 API,此中包含 push() 和 pop() 等办法. 有时也有 peek() 办法.
Frank: push() 有什么功效?
Linda: push() 接 受一个输入对象,比方说 foo,并将它放入到一个内部容器(比方一个数组)中 .push() 普通不返回后果.
Frank: 假如我 push() 两个对象,比方先是 foo,然后是 bar,后果会怎样?
Linda: 第二个对象 bar 应当在栈(至少包 含两个对象)的顶部,所以假如调用 pop(),那么返回的应当是 bar,而不是 foo.假如再次调用 pop(),那么应当返回 foo,然后栈为空(假定在增添这两 个对象之前栈中没有对象).
Frank: 也就是说,pop 移除近来放入栈中的项 目?
Linda: 是的,pop() 应当移除最上面的项目(假定栈中还有可移除的项 目).peek() 与此近似,只是不移除栈中的对象.peek() 应当保存栈顶的项目 .
Frank: 假如之前没有 push 任何项目,那么调用 pop() 时会怎样?
Linda: pop() 应当抛出一个非常,表明栈中还没有 push 任何项.
Frank: 假如 push()null 会怎样?
Linda: 栈应当抛出一个非常,因为 null 不是一 个有效的可 push() 的值.
在这段对话中,有没有注意到什么分外的地方呢(除了 Frank 不是计算机科 学专业的)?这里重新到尾没有效到 “测试” 这个词.但是, “应当” 这个词却非常自然地到处闪现.
怎么做才自然?
我应当利用哪类框架?
由于注释(annotation)的来由,可以使 用 JUnit 和 TestNG 来实践 BDD.我发现利用 JBehave 之类的 BDD 框架越发 风趣,因为它供应了定义行为类的特点,比方非常框架 便于实现更具文学气势 的编程.
BDD 并非什么新闹事物,更不具有什么革命性的冲破.它只 是 TDD 的一个分支,此中 “测试” 这个词换成了 “应当 ”.除了语义,很多人还发现,与测试 概念相比,应当 这个概念是一种 更自然的开辟驱动因素.考虑行为(应当)会自但是然地促使您先编写标准类, 此后者可以成为一个非常有效的实现驱动因素.
以 Frank 和 Linda 的 对话为底子,让我们看看 BDD 若何故 TDD 但愿奉行的方法驱动开辟.
以上是“追求代码质量 - 亲身体验行为驱动开辟[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |