TDD的第三章主要讲了一个概念Triangulation,用金山词霸查了的意义为三角测量。
三角测量的原理颇为简单,基本,非常好理解。如两眼睁开穿针很容易,一只眼睛就非常不容易,如果没试过不妨试一下。打官司的时候往往是公说公有理,婆说婆有理,但只要有一个无利害关系的第三方,就很容量理清是非了。
在软件测试领域三角测量也非常有用。如在TDD的第二章有这样一个测试用例。
public void testEquality() { assertTrue(new Dollar(5).equals(new Dollar(5))); }
如果只有这么一个用例很难说程序是对的。不对的可能性有很多种,如Dollar使用一个假的equals实现,该函数直接返回true;又有可能Dollar的构造函数根本没有使用参数值而是一个内部常量;还有其它的很多种情况导致程序是错的。但是只要给该测试用例再加另一个方面的内容,结果就不一样了,基本上可以保持程序是对的,我基本上没有找到异常情况,如果你能找到别忘了告诉我。
public void testEquality() { assertTrue(new Dollar(5).equals(new Dollar(5))); assertFalse(new Dollar(5).equals(new Dollar(6))); }
第二个例子也是从TDD的第三章摘取的。不对的情况,如amount的缺省值是10;times函数乘以多少是硬编码的;等等。
public void testMultiplication() { Dollar five = new Dollar(5); Dollar product = five.times(2); assertEquals(10, product.amount); }
但是再加上另一方面的,请在找找还有什么异常情况,恐怕要少很多。
public void testMultiplication() { Dollar five = new Dollar(5); Dollar product = five.times(2); assertEquals(10, product.amount); product = five.times(3); assertEquals(15, product.amount); }
1+1=?,很难说,就看怎么用了。