Junit Test Application-46-@DataJpaTest autoincrement 초기화

jaegeunsong97·2023년 8월 10일
0

Junit Bank Application 깃허브

Junit Bank Application 기록 노션

@DataJpaTest
public class TransactionRepositoryImpl extends DummyObject {

     @Autowired
     private UserRepository userRepository;
     @Autowired
     private AccountRepository accountRepository;
     @Autowired
     private TransactionRepository transactionRepository;

     @BeforeEach
     public void setUp() {
          dataSetting();
     }

     @Test
     public void dataJpt_test1() {
          List<Transaction> transactionList = transactionRepository.findAll();
          transactionList.forEach((transaction) -> {
               System.out.println("테스트 : " + transaction.getId());
               System.out.println("테스트 : " + transaction.getSender());
               System.out.println("테스트 : " + transaction.getReceiver());
               System.out.println("테스트 : " + transaction.getGubun());
               System.out.println("테스트 : ===============================");
          });
     }

문제점

1 ~ 10 까지 계속 증가, 테스트가 2개로 분리되어 있는데도

JPA 테스트 할 때는 truncate를 사용 못함, 즉 아래의 코드(@Sql)를 사용하지 못하는 것

해결법

JPA 테스틑 자동 truncate가 되지 않기 떄문에 직접 nativeQuery로 작성해서 초기화 시키기. 따라서 EntityManager 끌고오기

@ActiveProfiles("test")
@DataJpaTest
public class TransactionRepositoryImpl extends DummyObject {

     @Autowired
     private UserRepository userRepository;
     @Autowired
     private AccountRepository accountRepository;
     @Autowired
     private TransactionRepository transactionRepository;
     @Autowired
     private EntityManager em;

     @BeforeEach
     public void setUp() {
          autoIncrementReset();
          dataSetting();
     }
.
.
.
private void autoIncrementReset() {
          em.createNativeQuery("ALTER TABLE user_tb ALTER COLUMN id RESTART WITH 1").executeUpdate();
          em.createNativeQuery("ALTER TABLE account_tb ALTER COLUMN id RESTART WITH 1").executeUpdate();
          em.createNativeQuery("ALTER TABLE transaction_tb ALTER COLUMN id RESTART WITH 1").executeUpdate();
     }

전체 테스트

profile
블로그 이전 : https://medium.com/@jaegeunsong97

0개의 댓글