본문 바로가기
TIL : Today I learned (or Week)

TIL 230824 : 테스트 코드 1 - JUnit이란? 단위테스트

by 우인입니다 2023. 8. 27.

@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 230713 : 테스트코드..?

강의를 들으며 느끼는 것 중 하나로 단순히 코드를 짜고 오류가 나지 않게 작동하는 것 이외에 많은 역량이 필요한데, 그 중 하나가 테스트 코드를 작성하고 이를 유지보수 할 수 있는 능력이라

thiswooin.tistory.com

 

이미 이전 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 정적 메소드 정리

https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/Assumptions.html

 

 

 

 

 

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