@SpringBootTest 로 통합테스트
@SpringBootTest는 스프링이 동작되게 해주어 통합테스트를 가능하게 해주는 어노테이션이다.
우선, 초기에는 단위테스트에 집중해보기로 한다.
JUnit은 단위테스트용 프레임워크다
1주차 강의 내용 중에서 분명히 단위테스트용 프레임워크임을 명시를 해줬다.
스프링 2.2이상부터는 JUnit을 기본으로 사용한다고 한다.
통합테스트는 @SpringBootTest 어노테이션으로 해준다고 생각하고 우선 순서를 넘긴다.
FIRST 원칙
단위 테스트를 위한 F.I.R.S.T원칙
어디서 주워들어서 가져와본다. 이후 공부의 방향성을 갖추는 데 도움이 된다.
- Fast(빠르게)
- Independent(독립적으로)
- Repeatable(반복 가능하도록)
- Self-validating(셀프 검증이 되도록)
- Timely(시기 적절하게)
JUnit5 어노테이션 복습
https://thiswooin.tistory.com/52
이미 이전 TIL에서 기본 어노테이션에 대해서 학습을 했었다.
생명주기 관리 어노테이션
@BeforeEach / @AfterEach
@BeforeAll / @AfterAll
테스트 네이밍, 순서, 그룹화
@DisplayName
@Nested
@Order
테스트 반복
@RepeatedTest ( value=3, name=" test description {currentRepetition} / {totalRepetitons} "
@ParameterizedTest - @ValueSource(ints = { int배열로 직접 값 전달 가능}
공식 문서에 관련되게 상세히 안내되어 있다.
유틸
@Disabled : 해당 테스트는 스킵.
Assert
: 결과를 판별해주는 static 메소드. then 파트에서 주로 결과를 판별해준다.
'예를 들면 assertThrows는 이러이러한 상황에서 실행하면 아마 예외가 날 것이다. 그렇다면 실제로 그 예외가 발생했는지 판별해준다.'
assertTrue
assertEquals
assertNotNull
assertAll
assertThrows
assertDoesNotThrow
assertTimeout(duration, executable)
assertTimeoutPreemptively
Assumption
if와 비슷한 느낌인 듯?
직역하면 전제문인데, 특정전제를 만족할 때 테스트를 실행한다.
assumeTrue : 만약 전제문이 false라면 이후 테스트 전체가 종료된다.
assumingThat : 파라미터로 전달된 코드블럭만 실행되지 않는다.
공식문서 Assumption 정적 메소드 정리
JUnit5에서 사용하지 않는 어노테이션, etc
https://junit.org/junit5/docs/current/user-guide/#migrating-from-junit4-tips
공식문서상 마이그레이션 팁들에 상세히 나와있다.
이후 구글링하다가 처음보는 어노테이션에 당황하지 않기 위해 숙지한다.
- Assert -> Assertions로 변경
- @Before and @After no longer exist; use @BeforeEach and @AfterEach instead.
- @BeforeClass and @AfterClass no longer exist; use @BeforeAll and @AfterAll instead.
- @Ignore no longer exists: use @Disabled or one of the other built-in execution conditions instead
- @Category no longer exists; use @Tag instead.
- @RunWith no longer exists; superseded by @ExtendWith.
- @Rule and @ClassRule no longer exist; superseded by @ExtendWith and @RegisterExtension.
- @Test(expected = …) and the ExpectedException rule no longer exist; use Assertions.assertThrows(…) instead.
깨달은 것
JUnit4에서의 문법이 달랐다.
구글링하며 헷갈렸던 적이 있는데, 이제 구분하여 이해할 수 있다.
그리고 willReturn doReturn등 예전에 mock객체 다루며 썼던 것들이 있었는데, 이는 테스트더블이라는 가짜 객체를 만들어 수행하는 방법에서 사용되고 결국에 Mockito로 연결되는 듯 하다.
이후 이어서 이에대해 정리해본다.
참고링크
JUnit5 공식문서
https://junit.org/junit5/docs/current/user-guide/
[우아한테크 테코톡] - JUnit5사용법 (JUnit4와의 차이점도 조금씩 알려준다)
https://www.youtube.com/watch?v=EwI3E9Natcw
'TIL : Today I learned (or Week)' 카테고리의 다른 글
WIL 230827 : 테스트 코드 정면돌파 (0) | 2023.08.28 |
---|---|
TIL 230825 : 테스트 코드 2 - 의존성 없는 패키지 테스트 실습 (0) | 2023.08.28 |
TIL 230823 : 테스트 코드 0 - 마음 다 잡고 준비하기. (0) | 2023.08.27 |
TIL 230822 : 코딩테스트 입문단계에서 습득한 내장 메소드들 정리 (0) | 2023.08.25 |
TIL 230821 : AWS S3 (Simple Storage Service) 3 - 폴더 이름 정리, 권한 (버킷 정책, ACL) (0) | 2023.08.24 |