728x90

먼저 UserEntity를 정의 합니다.

package com.hiio.adminserver.entity.user;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.*;

@Entity
@Table(name = "T_USER")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserEntity {

    @Id
    @Column(name = "USER_EMAIL", length = 512)
    private String email;

    @Column(name = "USER_PASSWORD", length = 64, nullable = true)
    private String password;

    @Column(name = "USER_NAME", length = 64, nullable = true)
    private String name;
}

Email 을 id로 하고 512의 길이를 가집니다.
password는 null이 들어 올 수 있고 길이는 64입니다.
name 은 비밀번호와 마찬가지로 null을 허용하고 길이는 64입니다.

추후에 속성들이 추가 되거나 수정할 예정입니다.

그럼 이제 Repository를 하나 만들어 줍니다.

package com.hiio.adminserver.repository.user;

import com.hiio.adminserver.entity.user.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<UserEntity, String> {
}

그리고 총 3개의 insert 테스트 코드를 작성해 줬습니다.

  1. 아무런 속성값을 입력하지 않으면 JpaSystemException이 발생하는 것이 예상값 테스트
  2. 이메일 속성값에 빈문자열을 입력했을 경우 TransactionSystemException이 발생하는 것이 예상값인 테스트
  3. 이메일 속성값만을 넣은 테스트 코드

package com.hiio.adminserver.User;


import com.hiio.adminserver.entity.user.UserEntity;
import com.hiio.adminserver.repository.user.UserRepository;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.transaction.TransactionSystemException;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest
class UserRepositoryTest {
    private final Logger log = LoggerFactory.getLogger(getClass());

    @Autowired
    private UserRepository userRepo;

    @Test
    @DisplayName("Insert User Exception JpaSystemException")
    void insertUserJpaSystemException(){
        Exception exception = assertThrows(JpaSystemException.class,()->{
            UserEntity user = UserEntity.builder().build();
            userRepo.save(user);
            userRepo.flush();
        });
        log.error(exception.getClass().getName());
        exception.printStackTrace();
        assertThat(exception.getMessage(), containsString("must be manually assigned before calling 'persist()'"));
    }
    @Test
    @DisplayName("Insert User Exception TransactionSystemException")
    void insertUserTransactionSystemException(){
        Exception exception = assertThrows(TransactionSystemException.class,()->{
            UserEntity user = UserEntity.builder().email("").build();
            userRepo.save(user);
            userRepo.flush();
        });
        log.error(exception.getClass().getName());
        exception.printStackTrace();
        assertThat(exception.getMessage(), containsString("Could not commit JPA transaction"));
    }
    @Test
    @DisplayName("Insert User Fill Email")
    @Transactional
    void insertUser(){
        UserEntity user = UserEntity.builder().email("asd@asd.com").build();
        userRepo.save(user);
    }


}
728x90

+ Recent posts