테스트 코드 관련 팁

murkgom·2021년 11월 24일
0

출처 : https://github.com/cheese10yun/spring-guide/blob/master/docs/test-guide.md

테스트 구분

구분 단위

  • 통합테스트
  • 단위 테스트. Mvc 테스트
  • 단위 테스트. Repository 테스트
  • 단위 테스트. Service, Util 테스트
  • POJO, 도메인 테스트

구분 단위별 상속 전략

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
@Ignore
public class IntegrationTest {
	@Autowired protected ObjectMapper objectMapper;
    ...
}
  • 상위 클래스를 생성, 어노테이션을 할당
public class UserApiTest extends IntegrationTest {
	...
}
  • 실제 테스트 클래스에서 상위 클래스를 상속함으로써 테스트 환경의 통일성 획득

DB 상태에 의존적인 테스트를 지양하자

  • [조회] 류를 테스트할 때, 기존에 있는 값을 이용해 검증하지 말자.
  • 테스트 전에 데이터를 insert하는 방식을 지향(코드 or sql문 실행)

서비스 테스트

  • 서비스 테스트는 해당 로직이 관건이지 db에 실제 insert되는지 등이 관심사가 아니다.
  • So, Mocking을 활용하여 외부 의존성을 최소화하자
@ExtendWith(MockitoExtension.class)
@Ignore
public class MockTest {

}
import static org.mockito.BDDMockito.*;
import static org.junit.jupiter

public class UserServiceTest extends MockTest {
	@InjectionMocks
    	private UserService userService;
    
        @Mock
        private UserMapper userMapper;
    
        @Test
        public void 샘플_테스트() {
            given(userMapper.selectSampleById(any())
                .willReturn("SampleA");
            assertEquals("SampleA", userMapper.selectSampleById("Id1"));
            
           ...
            //when
            //then
	}
}
  • given(), any(), willReturn()은 org.mockito.BDDMockito의 메서드들
  • 실제 db에서 mapping해서 가져오는 부분은 관심사가 아니므로 해당 메서드를 통해 mocking
  • assertEquals()는 org.junit.jupiter.api.Assertions의 메서드

0개의 댓글