Spring Test

5w31892p·2022년 12월 26일
0

Spring

목록 보기
13/30

Spring Test

  • 개발 코드 배포 전 버그를 찾아내는 것이 바로 Test이다.

버그란?

  • 소프트웨서가 예상치 못한 결과를 내는 것
  • 소스코드설계과정에서의 오류 때문에 발생

블랙박스 테스팅

  • 사용자 입장에서 동작을 검사하는 방법이다.
  • 누구나 테스트가 가능하다.
  • 기능이 증가될 수록 테스트 범위가 증가된다.
  • 테스트 하는 사람에 따라 테스트 퀄리티가 달라진다.

개발자 테스트

  • 개발자가 직접 작성
  • 빠르고 정확하다.
  • 개발 시간이 오래 걸린다.
  • 테스트코드 유지보수 비용이 생긴다.
  1. Development: 개발
  2. Unit Tests (단위 테스트): 개발자 테스트
  3. QA Testing:
    • 블랙박스 테스팅
    • 주로 QA 팀이 Production 환경과 유사한 환경(Stage)에서 테스팅
  4. Production: 실 서비스 운영 환경

:: JUnit 을 이용한 단위 테스트

:: 단위 테스트란?

프로그램을 작은 단위로 쪼개 각 단위가 정확하게 동작하는지 검사한다.
문제 발생시 정확하게 어느 부분이 잘못되었는지를 빠르게 확인할 수 있다.

스프링에서 단위테스트를 하는 것은 스프링 컨테이너에 올라와 있는 Bean 테스트 하는 것이다.

특징

  1. assert() 메소드를 사용해 테스트가 정산인지 아닌지 판별
    -> assertEquals(예상값, 실제값)

  2. 각 @Test 어노테이션 메서드 호출 시 새로운 인스턴스를 생성하여 독립적인 테스트가 이뤄진다.

:: JUnit 테스트 어노테이션

@Test

  • 테스트 수행하는 메소드
  • 각 객체별로 생성

@Before

  • @Test 메소드 실행되기 전 반드시 실행
  • 공통으로 사용되는 set-up 코드를 @Before 메소드에 선언
  • 같은 환경에서 여러 메소드 테스트 하는 경우에는 단위테스트 전체 수행 전 @BeforeClass 선언으로 1번만 선언

@After

  • @Test 메소드 실행 후 반드시 실행
  • 단위테스트 전체 수행 후 @AfterClass 선언

@Ignore

  • Test Skip

TDD (Test-Driven-Development)

테스트 코드 작성 후 실제 동작하는 코드 개발

설계 -> 테스트 -> 개발


Given - When - Then Pattern

  • Given - 준비
  • When - 실행
  • Then - 검증

테스트를 하고 싶은 파일 Alt + ins -> Tset 클릭 후 바로 ok
테스트 코드 작성 후 run


각 테스트 케이스는 서로 분리되어야 한다.

하지만 di 한 경우에는 Mock 객체를 사용해야한다. (가짜 객체)

mock object

  • 겉만 같은 객체이므로 실제 DB 작업 안한다.

Mockito mock

testImplementation 'org.mockito:mockito-core:4.8.0'
testImplementation 'org.mockito:mockito-junit-jupiter:4.8.0'

@Mock

모킹할 객체 표기
@InjectMocks
모킹한 객체 주입해주는 코드

@Mock
ProductRepository productRepository;

@InjectMocks
ProductService productService;

@Mock
User user;

0개의 댓글