티스토리 뷰

728x90

1. 이 포스트는 JUnit 4 버전으로 작성되었다.

 

2. Integration Test를 위해서는 Application Context를 생성하여 한다. 

  2-1 이것을 위해 @RunWith라는 annotation으로 테스트를 수행하는 지정된 클래스를 실행하게 된다.

  2-2 테스트를 위한 간단한 Context를 실행한다고 생각할 수 있고, 보통 JUnit 4에서는 SpringRunner.class가 지정된다.

  2-3 SpringRunner.class는 이전에 SpringJUnit4ClassRunner의 이름만 바꾼거다.

 

3. JPA 테스트를 위하여 @DataJpaTest라는 것이 제공된다.

  3-1 내부적으로는 auto-configuration이 모두 disable되고 JPA테스트와 관련된 부분만 활성화 된다.

  3-2 @DataJpaTest가 지정된 클래스의 메소드는 모두 @Transactional이  설정되어 별도의 트랜젝션으로 수행된다.

    3-2-1 각 테스트를 수행 후에는 Roll back된다.

  3-3 기본적으로 외부 설정 파일이나 자동설정기능에서 지정한 datasource는 무시되고 내장 데이터베이스를 사용한다.

  3-4 다른 데이터베이스를 원하면 @AutoConfigureTestDatabase를 사용하여 지정할 수 있다.

  3-5 JPA테스트 기능 뿐 아니라 모든 스프링의 기능을 사용하고 싶고 내장 데이터베이스를 사용하려면

    3-5-1 SpringBootTest, @AutoConfigureTestDatabase 함께 사용하여 설정할 수 있다.

 

package pe.pilseong.recipe.repository;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;

import pe.pilseong.recipe.domain.UnitOfMeasure;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.Optional;

import org.junit.Before;    
    
@RunWith(SpringRunner.class)
@DataJpaTest
public class UnitOfMeasureRepositoryIT {

    @Autowired
    UnitOfMeasureRepository unitOfMeasureRepository;

    @Before
    public void setup(){

    }

    @Test
    @DirtiesContext
    public void findbyDescription() {
        Optional<UnitOfMeasure> uom = unitOfMeasureRepository.findByDescription("Teaspoon");

        assertEquals("Teaspoon", uom.get().getDescription());
    }

    @Test
    @DirtiesContext
    public void findbyDescriptionCup() {
        Optional<UnitOfMeasure> uom = unitOfMeasureRepository.findByDescription("Cup");

        assertEquals("Cup", uom.get().getDescription());
    }
        
    @Test
    public void test() {
        
    }
}
728x90
댓글