Spring

Assertions & Transactional 어노테이션

이무쿤 2019. 11. 10. 12:43
반응형

@Transactional 사용하면 roll back해줌 


delete해도 수행은 정상적으로 이뤄지지만 마지막에 roll back으로 해당 데이터가 안 지워진채로 다시 남음.

테스트 용도로 적합.

 

Many에 해당하는 Entity를 담은 List를 Stream을 통해 열람 하면서 read하는 테스트 작업 중에 오류가 발생할 수 있음. 

이 때 Transactional 붙여 줘야 함. A - B - C 로 구성되 ERD 모델에서 A와 B에 대한 관계를 생각 할 때 A가 가진 B의 

List를 뽑아서 그 안에 있는 C의 Id를 구하고자 한다면 이 과정과 동시에 A에 대해 C가 추가 된다면 무결성이 깨짐.

따라서 transactional로 atomic하도록 해줘야 함. 

 

Assertions 예시

 

@Test
public void delete(){


Optional<User> user = userRepository.findById(7L); //2번인데 long타입이므로 L 붙임.


Assertions.assertTrue(user.isPresent());



user.ifPresent(selectUser ->{

userRepository.delete(selectUser);
});

Optional<User> deluser = userRepository.findById(7L);


Assertions.assertFalse(deluser.isPresent());
}

 

Assertions.assertTrue(X) 하게 되면 X의 값이 true일 때 오류 없이 진행 가능.

반응형