|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。
本文是分两部分的文章的第二部分,会商怎样利用TDD在编写代码之前编写测试,并经由过程这个历程构成更好的计划。在第1部分中,我接纳后测试开辟方法(在编写代码以后编写测试)编写了完整数查找程序的一个版本。然后,利用TDD(在编写代码之前编写测试,如许就能够用测试驱动代码的计划)编写了另外一个版本。在第1部分的开端,我发明我在用来保留完整数列表的数据布局范例方面犯了一个基本性毛病:我最后依据直觉选用了ArrayList,可是厥后发明Set更符合。我将以这个成绩为出发点,会商怎样改善测试的质量和反省终极代码的质量。
测试质量
利用更好的Set笼统的测试见清单1:
清单1.利用更好的Set笼统的单位测试
_@Test public void add_factors() {
Set<Integer> expected =
new HashSet<Integer>(Arrays.asList(1, 2, 3, 6));
Classifier4 c = new Classifier4(6);
c.addFactor(2);
c.addFactor(3);
assertThat(c.getFactors(), is(expected));
}
这段代码测试我的成绩范畴中最关头的部分之一:猎取数字的因子。我但愿彻底地测试这个步骤,由于它是成绩中最庞大的部分,以是也是最简单呈现毛病的。可是,它包括一个粗笨的机关:newHashSet(Arrays.asList(1,2,3,6));。即便有了古代IDE撑持,这行代码编写起来也很别扭:输出new,输出Has,执行代码探察;输出<Int,再次实行代码探察,真是太贫苦了。我要让它简单些。
湿润的测试
AndyHunt和DaveThomas所著的ThePragmaticProgrammer提出了很多良好的编程理论,个中之一是DRY(DontRepeatYourself,不要反复本人)准绳。这条准绳主意从代码中打消一切反复,由于反复经常会招致毛病。可是,DRY不合用于单位测试。单位测试经常必要测试有渺小差别的代码举动,因而触及到类似和反复的情形。比方,为了在分歧的测试中测试各类情形,经常必要复制粘贴代码,以得出清单1中预期的了局(newHashSet(Arrays.asList(1,2,3,6)))。
关于TDD,我的履历划定规矩是测试应当是湿润的,可是不要湿透。也就是说,测试中能够有一些反复(并且这是不成制止的),可是不该该创立愚笨的反复布局。因而,我要重构测试,供应一个private帮助办法,用它处置这个经常使用的创立语句,见清单2:
清单2.坚持测试得当湿润的帮助办法
private Set<Integer> expectationSetWith(Integer... numbers) {
return new HashSet<Integer>(Arrays.asList(numbers));
}
<p>
你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。 |
|