TDD / mybatis - 회원 삭제
test 코드 작성
@Test
@DisplayName("회원 삭제 테스트")
public void deleteTest() {
int result = 0;
// 회원 id로 조회
Member member = service.findMemberById("test1");
result = service.delete(member.getNo());
// 삭제가 되면 result(영향 받는 행의 개수)는 양수이고 1일 것이라고 예상
assertThat(result).isPositive().isEqualTo(1);
// assertThat(result).isGreaterThan(0); // 이렇게도 작성 가능
}
service 코드 작성
- delete() 메서드 작성
public int delete(int no) {
// return 0;
return ;
}
역시 처음엔 return값을 이렇게 지정하여 테스트 통과, 실패 확인하기.
-
public int delete(int no) {
int result = 0;
SqlSession session = getSession(); // session 객체를 받아와서
result = dao.delete(session, no); // dao에 session과 member의 no값 전달하고 받아서 result에 저장
// 트랜젝션 처리(commit / rollback)
if(result > 0) { // 영향 받는 행의 개수가 0 보다 크면 삭제 성공
session.commit();
} else { // 영향 받는 행의 개수가 0 보다 크면 삭제 실패
session.rollback();
}
session.close();
return result;
}
dao 작성
public int delete(SqlSession session, int no) {
return session.delete("memberMapper.deleteMember", no); // no값 받아서 삭제하기
}
쿼리문 작성
- delete태그 사용
<delete id="deleteMember" parameterType="Member">
DELETE FROM MEMBER
WHERE NO = #{no}
</delete>
dao에서 두번째 매개값으로 전달받은 no로 삭제!
test 코드 수정
@ParameterizedTest
@ValueSource(strings = {"test1", "test2"}) // 받아오는 값이 id 하나이기 때문에 CsvSource 대신 ValueSource 사용
@DisplayName("회원 정보 삭제 테스트")
public void deleteTest(String id) { // ValuseSource에 있는 값이 하나씩 id에 들어오게 됨
int result = 0;
Member member = null;
Member findMember = null;
member = service.findMemberById(id);
result = service.delete(member.getNo()); // no: pk값
// DB에 member가 삭제 되었는지 다시 id로 member 조회
findMember = service.findMemberById(id);
assertThat(result).isPositive().isEqualTo(1);
// 조회한 member가 null이면 삭제 성공
assertThat(findMember).isNull();
}
이제야 패턴이 좀 보이는 거 같다.
이해는 하고 하는 걸까?? 외워진 건가??……
수업 떄는 설명 들으면 이해가 가는 거 같은데
혼자 다시 보면 뭔 말인가 싶다. 내 멘날 와르르멘션..