一般開發 vs TDD
一般開發流程
- 寫主程式
@Override
public Student getById(Integer studentId){
String sqlstr = "SELECT id ,name FROM student WHERE id = :studentId";
Map<String ,Object> map = new HashMap<>();
map.put("studentId" ,studentId);
List<Student> list = nameParameterJdbcTemplate.query(sqlstr ,map ,new StudentRowMapper());
if(list.size() > 0){
return list.get(0);
}else{
return null;
}
}
- 進行單元測試
@Test
public void getById(){
Student student = studentDao.getById(1);
assertNotNull(student);
assertEquals("Amy" ,student.getName());
assertEquals(90.3 ,student.getScore());
assertTrue(student.isGraduate());
assertNotNull(student.getCreateDate());
}
TDD的流程
- 主程式
定義方法的參數與返回值 ,但不會實作這個方法裡面的邏輯
- 進行單元測試
需要發揮一點想像力 ,以使用者的角度下去寫
@Test
public void getById(){
Student student = studentDao.getById(1);
assertNotNull(student);
assertEquals("Amy" ,student.getName());
assertEquals(90.3 ,student.getScore());
assertTrue(student.isGraduate());
assertNotNull(student.getCreateDate());
}
- 再回來寫主程式
@Override
public Student getById(Integer studentId){
String sqlstr = "SELECT id ,name FROM student WHERE id = :studentId";
Map<String ,Object> map = new HashMap<>();
map.put("studentId" ,studentId);
List<Student> list = nameParameterJdbcTemplate.query(sqlstr ,map ,new StudentRowMapper());
if(list.size() > 0){
return list.get(0);
}else{
return null;
}
}