Good Morning

Java에서 데이터베이스 CRUD 작업 테스트하기: 사용자 정보 업데이트 예제 본문

Back-End/Java

Java에서 데이터베이스 CRUD 작업 테스트하기: 사용자 정보 업데이트 예제

욘쥰 2024. 8. 7. 14:27

Java에서 데이터베이스 CRUD(Create, Read, Update, Delete) 작업, 특히 Update 작업에 대한 단위 테스트를 작성하는 방법에 대해 알아보겠습니다.

1. 배경

데이터베이스 작업을 수행하는 코드를 테스트하는 것은 애플리케이션의 안정성을 보장하는 데 매우 중요합니다. 여기서는 사용자 정보를 업데이트하는 기능을 예로 들어 설명하겠습니다.

2. 코드 구조

먼저, 다음과 같은 메서드가 있다고 가정해봅시다:

public int updateUser(User user) throws Exception {
    Connection conn = ds.getConnection();
    String sql = "UPDATE user_info SET pwd=?, name=?, email=?, birth=?, sns=? WHERE id=?";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    // 파라미터 설정
    return pstmt.executeUpdate();
}


이 메서드는 User 객체를 받아 데이터베이스의 user_info 테이블을 업데이트합니다.

3. 테스트 코드 작성

이제 이 updateUser 메서드를 테스트하는 코드를 작성해 보겠습니다:

@Test
public void updateUserTest() throws Exception {
    // 1. 테스트 준비: 기존 데이터 삭제 및 새 사용자 추가
    deleteAll();
    User user = new User("testuser", "password", "Test User", "test@example.com", new Date(), "twitter", new Date());
    insertUser(user);

    // 2. 업데이트할 새로운 정보 생성
    User updatedUser = new User("testuser", "newpassword", "Updated User", "updated@example.com", new Date(), "facebook", new Date());

    // 3. updateUser 메소드 호출
    int rowCnt = updateUser(updatedUser);

    // 4. 업데이트 결과 확인
    assertTrue(rowCnt == 1);

    // 5. 업데이트된 사용자 정보 조회
    User retrievedUser = selectUser("testuser");

    // 6. 조회된 정보와 업데이트한 정보 비교
    assertNotNull(retrievedUser);
    assertEquals(updatedUser.getPwd(), retrievedUser.getPwd());
    assertEquals(updatedUser.getName(), retrievedUser.getName());
    assertEquals(updatedUser.getEmail(), retrievedUser.getEmail());
    assertEquals(updatedUser.getSns(), retrievedUser.getSns());

    // 7. ID는 변경되지 않았는지 확인
    assertEquals(user.getId(), retrievedUser.getId());
}

4. 테스트 코드 설명

  1. 테스트 준비: 기존 데이터를 모두 삭제하고 새로운 테스트 사용자를 추가합니다.
  2. 업데이트 정보 생성: 변경할 사용자 정보를 새로운 User 객체로 생성합니다.
  3. updateUser 메소드 호출: 실제 업데이트 작업을 수행합니다.
  4. 업데이트 결과 확인: 반환된 rowCnt가 1인지 확인합니다. 이는 정확히 한 행이 업데이트되었음을 의미합니다.
  5. 업데이트된 정보 조회: 데이터베이스에서 업데이트된 사용자 정보를 다시 조회합니다.
  6. 정보 비교: 업데이트된 정보가 예상대로 변경되었는지 각 필드를 비교합니다.
  7. ID 확인: 사용자 ID는 변경되지 않았는지 확인합니다.

5. assertTrue(rowCnt == 1)의 의미

이 assertion은 매우 중요합니다. updateUser 메소드가 반환하는 rowCnt는 영향을 받은 행의 수를 나타냅니다.

  • rowCnt == 1: 정확히 한 행이 업데이트되었음을 의미합니다. 이는 우리가 원하는 결과입니다.
  • rowCnt == 0: 업데이트할 사용자를 찾지 못했다는 의미일 수 있습니다.
  • rowCnt > 1: 여러 행이 업데이트되었다는 의미로, 이는 예상치 못한 결과입니다.

따라서 rowCnt == 1을 확인함으로써, 우리는 updateUser 메서드가 정확히 한 명의 사용자 정보만을 업데이트했다는 것을 검증할 수 있습니다.