Spring 과 Integration하여 Test
@RunWith(SpringRunner.class)
spring과 integration하여서 메모리 모드로 엮는다
junit4가 지원하는 어노테이션으로, @Autowired @MockBean 이 붙어있는 것들만 application context로 로딩함
- Runner - test 프로세스들을 계획하고 실행하는 클래스
@SpringBootTest
application context를 모두 적재하여 RunWith를 사용하였을 때보다 무겁다
@Transactional
모든 테스트를 한 후에 roll-back을 하기 위함
@RunWith(SpringRunner.class)
@SpringBootTest // unit test 할때는 @DataJpaTest를 써주는 것이 좋다
@Transactional
public class ProductServiceTest{
...
}
@Test
Runner가 해당 어노테이션이 붙은 메서드들을 보면서 실행시킬 계획을 잡고 실행시킨다
@Test(expected = CustomedException.class)
test의 결과물로 직접 정의한 exception이 나오는 것을 기대하는 경우
@Rollback(value=false)
만약 data가 실제 db에 반영되었는지 확인하고 싶으면 롤백이 되지 않도록 처리해주어야 함
class 어노테이션으로 @Transactional을 달아놓았기 때문에!
@Test(expected=IllegalStateException.class)
public void 재고수량예외() throws Exception{
//given
Product product = new Product("사과", 30);
//when
productService.buy(32); // 30-32 재고부족으로 IllegalStateException이 나와야 함
//then
fail("재고 예외 발생해야하는데 발생하지 않음")
}
@Test
@Rollback(value=false)
public void 상품등록() throws exception{
//given
Product product = new Product();
product.setTitle("사과");
//when
Long id = productService.enroll(product);
//then
assertEquals("상품등록이 제대로 되지 않음", product, productRepository.findById(id));
}
- given - 현재 주어진 자원이 무엇인지
- when - 어떠한 상황이 발생 시 (상품 등록이 발생시)
- then - 결과의 validation이 옳은지
'Spring > boot' 카테고리의 다른 글
[Spring Boot] 개발 단계에서 테스트를 위한 DB data 만들기 (0) | 2022.02.18 |
---|---|
[JPA] DB의 data가 update 되는 플로우 정리 (0) | 2022.02.18 |
[Spring Boot] Rest Controller DTO 의 필요성 (0) | 2022.02.15 |
spring boot Service 코드 repository injection관련 (0) | 2021.12.27 |
spring JPA 엔티티 Entity 어노테이션 정리 (0) | 2021.12.24 |