《Agile Java》是一本Java开发的入门书籍,同时讲述测试驱动开发(TDD)。作者将自己定位为一名软件工匠,分享自己的实际开发经验。从今天开始决定看完《Agile Java 中文版》,并敲完所有的例子代码,做完每章后面的习题,并在这里记录下我写的习题。
第一章的习题是创建国际象棋的卒Pawn类的。
1、创建PawnTest的空测试类,尝试运行JUnit,结果是不能运行。因为我使用的是JUnit4,在JUnit4中测试类和普通类是一样的,当你给他的某个方法加上注解"@Test",标识出这个是测试;而不是像以前版本那样必须是TestCase的子类,并且使用特殊命名方式来标识测试方法。
public class PawnTest { }
2、创建测试方法TestCreate。现在可以运行JUnit。并且可以看到JUnit的绿条。
@Test public void testCreate() { }
3、在testCreate中添加一个Pawn对象的代码。
@Test public void testCreate() { Pawn pawn = new Pawn(); }
很明显这会导致编译错误,出现错误并不是问题,只要我们及时的解决掉他了。于是我们创建一个Pawn类。
public class Pawn { }
现在编译错误没有了。并且运行JUnit可以看到绿色条条。一切正常,下一步。
4、增加一个断言,判断我们新增的pawn是否默认白色的(预设默认的卒是白色的)。
@Test public void testCreate() { Pawn pawn = new Pawn(); assertEquals("white", pawn.getColor()); }
并在Pawn中创建方法getColor,保证能够正常编译:
public String getColor() { return null; }
运行JUnit,红条!!Failures:1.JUnit告诉我们测试有一个失败本来想应该是“white”,但是是“null”,我们要正视错误,用最简单的方法解决它。于是我们在getColor中返回“white”。
public String getColor() { return "white"; }
运行JUnit,绿条重现。正常下一步。
5、在testCase中添加一个黑色的卒:
Pawn blackPawn = new Pawn("black"); assertEquals("black", blackPawn.getColor());
为了解决编译错误,在Pawn中添加两个构造函数:
public Pawn() { } public Pawn(String color) { }
编译问题解决了,运行JUnit。红条!!Failures:1,解决之。因为我的getColor是直接返回的“white”,必须修改让其返回正确的颜色。修改之后的Pawn类如下:
private String color; public Pawn() { this.color = "white"; } public Pawn(String color) { this.color = color; } public String getColor() { return this.color; }
运行JUnit,见到绿条,下一步。
6、重构,将程序中的字符串定义为常量。在PawnTest里面添加:
final String white = "white";
final String black = "black";
在Pawn里面添加:
static final String defaultColor = "white";
并将程序里面直接手写的字符串修改为这几个常量。
这章的最终程序在附件里面。我的环境:windows,eclipse3.5,jdk1.6,JUnit4.5