1 minute read

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();
}

이제야 패턴이 좀 보이는 거 같다.
이해는 하고 하는 걸까?? 외워진 건가??……

수업 떄는 설명 들으면 이해가 가는 거 같은데
혼자 다시 보면 뭔 말인가 싶다. 내 멘날 와르르멘션..


Categories:

Updated: