最近一直在使用TDD方式开发,回头看看自己的编程速度下降了不少,仔细想了想原因,可能是一下几个方面引起的:
1、TDD感觉上是为填充通过测试而些代码,缺少了以前伪代码方式的连贯性,写代码都是些片段,比较难像以前的一气呵成。
2、对需求的了解方式是否不同?以前的写法是以功能为出发点,感觉更自然些,而TDD是以结果为导向,测试案例写法的基本思路:输入->执行->结果预期
3、【输入】简单的两个字,在写的过程中是最为复杂的地方,常常要准备大量的数据,而且会把测试案例搞的可读性下降,
4、【结果预期】通常比较简单,但其实是最为关键的部分,也是它导致了【输入】的复杂性,其实有时想知道验证的是啥,也是比较困难的。
TDD的好处也一大堆,就不说了,只是过程还是感到有些不能得心应手的地方。
分析上面的一些原因,给自己制定一些改进尝试的方式:
1、连贯性的思维转移 -> 测试案例的连贯性,将写伪代码方式的连贯引入到测试案例的编写中(指的是功能描述的,指下面的第2点)。
2、需求中功能的切分方式,明确-该功能完成后-可得到的结果(可验证的),第一个案例先写正常流程的,后面跟边界条件、结果
例如在自己的notetip中这样写需求:
this.testClickStrengthenBtn_NoEnoughItem = function() {
this.setPreCondition({itemnum:0,money:1000000,level:0});
this.items.strenbtn.click();
assert(gamesys.getPopSysMsg() == g_strs.hero.errtip.noenoughitem);
}
this.testClickStrengthenBtn_NoEnoughMoney = function() {
this.setPreCondition({itemnum:1000000,money:0,level:0});
this.items.strenbtn.click();
assert(gamesys.getPopSysMsg() == g_strs.hero.errtip.noenoughmoney);
}
3、编写一些自己的测试语句,包括初始条件的等,第2点中this.setPreCondition这个就是最近使用,效果比较好,由于javascript中@R_301_472@关键字参数(python支持),可以使用字典参数,达到同样强的参数可读性。后续多完善一些固定设施的工具函数,减少输入的壁垒。
写到这里,感觉自己的思维有些清晰了,关键是第2点重点尝试下,看有否改善。
继续写代码去了。。。