1 minute read

test 코드 작성

@Test
@DisplayName("게시글 등록 테스트")
public void insertBoardTest() {
    int result = 0;
    Board board = new Board();
    
    board.setWriterNo(2); // Board 객체에 작성자 회원 번호 set
    board.setTitle("mybatis 게시글");
    board.setContent("mybatis 게시글 내용 등록");
    
    result = service.save(board); // service에 Board 객체를 만들어서 넘겨줌
    
    assertThat(result).isGreaterThan(0); // 저장이 잘 될 경우 영향받는 행의 갯수는 0 이상
}

service 코드 작성

public int save(Board board) {
    int result = 0; // 결과값이 정수값이니까 먼저 만들어줌(DB에서 영향 받는 행의 갯수)
    SqlSession session = getSession();

    if(board.getNo() != 0) { // no = pk값. 0이면 등록, 아니면 수정
        // update
        // 수정 로직 작성 예정
    } else {
        // insert
        result = dao.insertBoard(session, board);
    }

    if(result > 0) {
        // 영향받은 행의 개수가 있음. 저장 또는 수정 성공
        session.commit();
    } else {
        session.rollback();
    }

    session.close();

    return result;
}

dao 코드 작성

public int insertBoard(SqlSession session, Board board) {
    return session.insert("boardMapper.insertBoard", board);
}

쿼리문 작성

  • 데이터 insert 후 PK값 받아오기
    • 아래 test 코드에서 실제 게시글이 DB에 잘 저장 되었는지 확인하기 위해 no값으로 게시글 조회할 때 사용
    • insert 태그에 useGeneratedKeys, keyColumn, keyProperty 속성 추가
      • useGeneratedKeys : insert 후 PK 값을 받아오도록 허용
      • keyColumn : PK 컬럼 지정
      • keyProperty : PK 값이 담길 파라미터 객체의 필드명 지정
<insert id="insertBoard" parameterType="Board" useGeneratedKeys="true" keyColumn="NO" keyProperty="no">
    INSERT INTO BOARD (
        NO,
        WRITER_NO,
        TITLE,
        CONTENT,
        ORIGINAL_FILENAME,
        RENAMED_FILENAME,
        READCOUNT,
        STATUS,
        TYPE,
        CREATE_DATE,
        MODIFY_DATE
    ) VALUES (
        SEQ_BOARD_NO.NEXTVAL,
        #{ writerNo },
        #{ title },
        #{ content },
        #{ originalFileName },
        #{ renamedFileName },
        DEFAULT,
        DEFAULT,
        DEFAULT,
        DEFAULT,
        DEFAULT
    )
</insert>

test 코드 수정

  • 리팩토링 진행하여 좀 더 자세히 테스트 해보기
  • 실제로 저장이 잘 되었는지 게시글 객체를 꺼내서 확인하기
@Test
@DisplayName("게시글 등록 테스트")
public void insertBoardTest() {
    int result = 0;
    Board board = new Board();
    Board findBoard = null;
    
    board.setWriterNo(2);
    board.setTitle("mybatis 게시글");
    board.setContent("mybatis 게시글 내용 등록");
    
    result = service.save(board);
    findBoard = service.findBoardByNo(board.getNo()); // no로 게시글 조회
    
    assertThat(result).isGreaterThan(0);
    // 게시글 객체가 null이 아니고
    // DB에 저장되어 있는 게시글 객체에서 추출한 no값이 
    // 게시글 객체의 no값고 동일한지 확인
    assertThat(findBoard).isNotNull().extracting("no").isEqualTo(board.getNo());
}

Categories:

Updated: