下面按照Kend Beck描述的TDD开发步骤来进行:
1 添加测试
明确了上面的需求以后,开始执行上述步骤的第一步:添加测试。
a)为该程序命名,类名为MyFormatter,作为一个工具应用程序,使用静态方法,名为“formateDate()”,下面新建一个新类,如代码清单1所示:
清单1
/** *//**
* 日期格式化程序,将输入的日期字符串格式化为MM-DD-YYYY的形式
*
*/
public class MyFormatter ...{
public static String formatDate(String strUnFormatted)...{
return null;
}
}
清单2
mport junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/** *//**
* 该测试类使用Junit框架来对需求规格中
* 关于日期格式化程序的所有测试案例进行测试
*
*/
public class MyFormatterTester extends TestCase ...{
private static final String TEST_FAILURE_MSG = "测试失败";
//public static void main(String[] args) {
//该方法提供一个Junit的Swing GUI呈现
//junit.swingui.TestRunner.run(MyFormatterTester.class);
//}
/** *//**
* Junit的测试套件(test suite)方法
*/
public static Test suite() ...{
TestSuite suite = new TestSuite("MyFormatter测试程序");
/**//*
* Junit框架TestSuite class有个特殊的构造函数
* 接受一个class为参数,创建出来的test suite会将该class内所有
* 以"test"开头的方法当作test cases包含进来
*/
suite.addTestSuite(MyFormatterTester.class);
return suite;
}
/** *//**
* 测试输入null是否返回""
*/
public void testIfNullReturnEmptyStr1() ...{
assertEquals(errorMsgTitle("输入null返回''"), "",
MyFormatter.formatDate(null));
}
/** *//**
* 测试输入""是否返回""
*/
public void testIfNullReturnEmptyStr2() ...{
assertEquals(errorMsgTitle("输入''返回''"), "",
MyFormatter.formatDate(""));
}
/** *//**
* 测试该程序是否给只有一位数字的日期在高位补上一个0
* 并且返回MM-DD-YYYY的格式
*/
public void testAppendZeroSingleD() ...{
assertEquals(errorMsgTitle("输入一位数字的日期在高位补上一个0"),
"11-01-2006", MyFormatter.formatDate("11-1-2006"));
}
/** *//**
* 测试该程序是否给只有一位数字的月份在高位补上一个0
* 并且返回MM-DD-YYYY的格式
*/
public void testAppendZeroSingleM() ...{
assertEquals(errorMsgTitle("输入一位数字的月份在高位补上一个0"),
"01-11-2006", MyFormatter.formatDate("1-11-2006"));
}
/** *//**
* 测试该程序是否给两位数字的年份的高位补上20
* 并且返回MM-DD-YYYY的格式
*/
public void testAppend20YearOfYYStyle() ...{
assertEquals(errorMsgTitle("输入两位数字的年份在高位补上20"),
"01-01-2006", MyFormatter.formatDate("1-1-06"));
}
/** *//**
* 测试该程序是否在输入了其他不符合MM-DD-YYYY格式的任意字符串时
* (如输入字母,或者非“-“的分隔符等情况) 返回''
*/
public void testCorrectSeparateValue() ...{
assertEquals(errorMsgTitle("输入了由非“-“分隔的非法字符串时返回''" ),
"", MyFormatter.formatDate("2,12,06"));
}
public void testCorrectNumericValue() ...{
assertEquals(errorMsgTitle("输入了含有字母的非法字符串时返回''" ),
"", MyFormatter.formatDate("A-B-06"));
}
/**//*
* 可能存在其他测试案例,但需求中没有交代
* (这或许就是需求存在缺陷,亦或添加更多的测试是自投苦海)
* 所以此处省略...
*/
/** *//**
* 依据传入的内容,显示测试失败的相应信息
*/
private String errorMsgTitle(String msg) ...{
return msg + " " + TEST_FAILURE_MSG;
}
}