跳转至

一般開發 vs TDD

一般開發流程

  1. 寫主程式
@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;
    }
}
  1. 進行單元測試
@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的流程

  1. 主程式

定義方法的參數與返回值 ,但不會實作這個方法裡面的邏輯

@Override
public Student getById(Integer studentId){
        return null;
}
  1. 進行單元測試

需要發揮一點想像力 ,以使用者的角度下去寫

@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());
}
  1. 再回來寫主程式
@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;
    }
}