1991年秋,在美国勒海大学亚科卡学院的一份研究报告《21世纪美国制造业的战略:一个工业主导的观点》中,首次提出了敏捷竞争的概念.而今天,我们似乎已经看到,敏捷已经在我们身边,形影不离.
作者:中国IT实验室 来源:中国IT实验室 2007年8月27日
关键字:
这个测试是基于JUnit基础测试类TestCase的。测试方法testLogin()创建了一个LoginDialog 的实例,调用了他的login()方法,然后判定结果是真。这段代码将不会编译,因为LoginDialog 不存在。在TDD过程后,LoginDialog
将生成和保存,代码编译后,测试运行验证将象预期的那样失败(因为方法没有实现)。然后 LoginDialog 为了通过单元测试给出最小的实现,遵照敏捷的圣条 做 可能工作的最简单的事情(the simplest thing that could possibly work)。例2展示了最初的LoginDialog 版本,用最少的代码通过了单元测试,实现在LoginDialog.java. 文件里。
LoginDialog.java
public class LoginDialog {
LoginDialog() {}
public boolean login(String username, String password) {
return true; } }
使用下面的命令来运行代码
javac -classpath ".;junit.jar" LoginDialogTest.java
javac -classpath "." LoginDialog.java
classpath 必须包括junit.jar 来运行单元测试,因为他使用了JUnit.在Linux,Mac OSX,还有其他的UNIX系统上,classpath将包含一个冒号(:)而不是想下面那样用一个分号。
测试将如下运行
java -classpath ".;junit.jar" junit.textui.TestRunner LoginDialogTest
单元测试通过了,真好!不幸的是,这个编码只是模拟一下。Login()方法将总是批准登录。毋庸置疑,客户将不会欣赏这种水平的安全机制。显然,要写的下一个测试是验证如果给的条件不正确的话将失败。例3展示了LoginDialogTest 的第二个测试方法去实现这个目的,testLoginFail() 。既然两个测试都使用一个LoginDialog 的实例,测试类被重构为在他的setUp() 方法里创建一个固定的测试用的LoginDialog。
LoginDialogTest.java
import junit.framework.*;
public class LoginDialogTest extends TestCase {
private LoginDialog dialog;
public void setUp() {
dialog = new LoginDialog();
}
public void testLogin() {
assertTrue( dialog.login("user", "passwd") );
}
public void testLoginFail() {
assertFalse( dialog.login("", "") );
}}
LoginDialog 必须得通过新的测试,不能在第一次测试的时候有失败。TDD过程引导我们构造我们需要的真正的功能,在用正确的用户名和密码登录的时候,能成功登录,如果不是,就失败。例4展示了按此修改的LoginDialog
LoginDialog.java
public class LoginDialog {
private String user = "user";
private String passwd = "passwd";
LoginDialog() {}
public boolean login(String username, String password) {
if (user.equals(username) && passwd.equals(password))
return true;
else
return false;
} }