首选XP工具 从Eclipse到JUnit
通过向Account增加do-nothing withdraw() 方法来使测试进行编译,然后重新运行测试。测试失败。现在实施withdraw方法。Account类看起来应与表7类似:
表7:实施了withdraw()方法的Account

所有测试都应通过。现在是时候进行集成了。您将回忆起在XP中“连续集成”是一项重要的实践。任何时候所有测试通过,您可以将代码集成到系统中。您应尽可能早并经常进行集成。Eclipse使这一切变得异乎寻常的简单。
集成,集成,集成
为了准备您的Eclipse workspace进行集成,完成以下步骤;您将需要设置CVS:
选择Window >Open Perspective >Other >CVS Repository Exploring,打开CVS视图。
右击并选择New Repository Location。输入与您的特殊设置有关的所有参数,然后点击Finish。在CVS Repositories视图的表中应显示一个存储位置(Repository Location)。打开它您将看到一个HEAD流、一个Branches条目和一个Versions条目。HEAD条目是用户应集成的主要代码流(如果它们需要自己分叉并稍后与HEAD流合并,这主意不错)。
关闭CVS视图窗口。
要将代码集成到系统中,完成以下步骤:
右击Sample项目。
选择Team >Share Project。您正在“共享”一个以前未集成的项目。您通常只需这样做一次。
根据提示,选择您希望的存储位置,然后点击Finish.
现在XP流程应该是这样:“编写一个测试,编写足够的代码来使测试通过,重新运行测试,集成。”
现在我们来看一看TC_Account。注意是否有任何代码复制的现象?这两种测试方法都例示一个Account。JUnit框架在每个测试方法之前运行setUp()方法,因此这就是进行所有测试需要的任何设置的逻辑场所。例示Account对象合格。
这是简单的refactoring,但Eclipse使其甚至更简单:
进入TC_Account的编辑器
右击testDeposit()中的account局部变量,然后选择Refactor >Convert Local Variable to Field.
输入“account”作为字段名,选择protected访问限制符(access qualifier),然后点击OK。现在您的测试类有一个叫做account的受保护的字段,测试方法对其进行了初始化。
将初始化account的代码从测试方法移到setUp(),然后删除其它测试方法中的声明和初始化。您的测试类现在看起来应与表8类似:
表8:Refactored TC_Account

您还得做一些工作,但Eclipse至少为您减少了一些单调乏味的输入工作。检查上下文菜单中其它refactorings变量。其中一些变量功能非常强大,可以节约您大量的时间:
进入Account编辑器,然后点击balance()方法名。
选择Refactor >Rename,然后输入“getBalance”作为新名称。
确信选中“Update references to the renamed element”,然后点击OK。
这一简单的练习重命名了Account的accessor方法并更新了所有引用。重新运行测试以确保一切仍在正常运行。对于一个类来说,这可以很轻松地节约一分钟的时间,或者减少大量输入工作。想像一下,您有一个巨大的系统并有多个类调用getBalance,结果又将如何。您可以自由地在街上跳舞了!并且最重要的一件事是refactorings是可以撤销的。如果您输入了“getbalancew,”只需撤销就可以了。更有甚者,由于它如此简单,您只需再次refactor并更改这一名称。