본문 바로가기
Spring & Spring-Boot

JUnit에서 테스트 지원하는 어노테이션 정리

by 명호킴 2023. 6. 28.

JUnit4 에서 JUnit Jupiter로 마이그레이션할 때 조심해야할 것.

  • 어노테이션은 org.junit.jupiter.api 패키지에 있다.
  • Assertion은 org.junit.jupiter.api.Assertions 에 있다.
    • org.junit.Asssert 에 있는 assertion 메서드나 다른 assertion 라이브러리인 AssertJ, Hamcrest, Truth 등을 사용해도 된다.
  • Assumption은 org.junit.jupiter.api.Assumptions 에 있다.
  • @Before 와 @After는 더 이상 없다. 대신 @BeforeEach와 @AfterEach를 사용해야 한다.
  • @BeforeClass와 @AFterClass는 더 이상 없다. 대신 @BeforeAll와 @AfterAll를 사용해야 한다.
  • @Ignore는 더이상 없다. 대신 @Disabled나 내장된 조건실행(execution condition)을 사용하면 된다.
  • @Category는 더 이상 없다. 대신 @Tag를 사용하면 된다.
  • @RunWith는 더 이상 없다. 대신 @ExtendWith을 사용하면 된다.
  • @Rule과 @ClassRule은 더 이상 없다. 대신 @ExtendWith과 @RegisterExtenstion을 사용하면 된다.

@Test

- @Test가 선언된 메서드는 테스트를 수행하는 메소드이다.

- jUnit은 각각의 테스트가 서로 영향을 주지 않고 독립적으로 실행됨을 원칙으로 @Test마다 객체를 생성한다.

 

@DisplayName

테스트 클래스나 테스트 메소드에 이름을 붙여줄 때 사용한다.

@Test
@DisplayName("테스트 잘되고 있는지 ~~?")
void test() {}

@DisplayNameGeneration

클래스에 해당 애노테이션을 붙이면 @Test 메소드 이름에 언더바(_)로 표시한 모든 부분은 공백으로 처리된다.

@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
class SomeTest {
  ...
}

@BeforeEach

각각 테스트 메소드가 실행되기 전에 실행되어야 하는 메소드를 명시해준다. 

@Test , @RepeatedTest , @ParameterizedTest , @TestFactory 가 붙은 테스트 메소드가 실행하기 전에 실행된다. JUnit4의 @Before 와 같은 역할을 한다. 개인적으로 테스트 하기전에 필요한 목업 데이터를 미리 세팅해주기 위해 주로 사용한다.

 

@AfterEach

@Test , @RepeatedTest , @ParameterizedTest , @TestFactory 가 붙은 테스트 메소드가 실행되고 난 후 실행된다. JUnit4의 @After 어노테이션과 같은 역할을 한다.

 

@BeforeAll

@BeforeEach 는 각 테스트 메소드 마다 실행되지만, 이 어노테이션은 테스트가 시작하기 전 딱 한 번만 실행 된다.

 

@AfterAll

위와 같다. 테스트가 완전히 끝난 후 딱 한 번만 실행 된다.

 

@Tag

테스트를 필터링할 때 사용한다. 클래스또는 메소드레벨에 사용한다.

 

@Ignore

- @Ignore가 선언된 메서드는 테스트를 실행하지 않게 한다.

 

@Disabled

테스트 클래스나, 메소드의 테스트를 비활성화 한다. JUnit4의 @Ignore와 같다.

 

@Before

- @Before가 선언된 메서드는 @Test 메서드가 실행되기 전에 반드시 실행되어진다.

- @Test메서드에서 공통으로 사용하는 코드를 @Before 메서드에 선언하여 사용하면 된다.

 

@After

- @After가 선언된 메서드는 @Test 메소드가 실행된 후 실행된다.

 

@Timeout

주어진 시간안에 테스트가 끝나지 않으면 실패한다.

 

@ExtendWith

extension을 등록한다. 이 어노테이션은 상속이 된다. 확장팩이라고 생각하면 될 것 같다.

 

@RegisterExtension

필드를 통해 extension을 등록한다. 이런 필드는 private이 아니라면 상속된다.

 

@TempDir

필드 주입이나 파라미터 주입을 통해 임시적인 디렉토리를 제공할 때 사용한다.

 

@BeforeClass

- @BeforeClass 어노테이션은 @Test 메소드보다 먼저 한번만 수행되어야 할 경우에 사용하면 된다.

 

@AfterClass

- @AfterClass 어노테이션은 @Test 메소드 보다 나중에 한번만 수행되어야 할 경우에 사용하면 된다.

 

@RunWith(SpringJUnit4ClassRunner.class)

- @RunWith는 jUnit 프레임워크의 테스트 실행방법을 확장할 때 사용하는 어노테이션이다.

- SpringJUnit4ClassRunner라는 클래스를 지정해주면 jUnit이 테스트를 진행하는 중에 ApplicationContext를 만들고 관리하는 작업을 진행해준다.

- @RunWith 어노테이션은 각각의 테스트 별로 객체가 새성되더라도 싱글톤(Singletone)의 ApplicationContext를 보장한다.

 

@ContextConfiguration

- 스프링 빈(Bean) 설정 파일의 위치를 지정할 떄 사용되는 어노테이션이다.

 

@Autowired

- 스프링 DI에서 사용되는 특별한 어노테이션이다.

- 해당 변수에 자동으로 빈(Bean)을 매핑 해준다.

- 스프링 빈(Bean) 설정 파일을 읽기 위해 굳이 GenericXmlApplicationContext를 사용할 필요가 없다.

- 변수, setter메서드, 생성자, 일반메서드에 적용가능하다.

- 의존하는 객체를 주입할 떄 주로 Type을 이용하게 된다.

- <property>, <constructor-arg> 태그와 동일한 역할을 한다.

 

 

#참고 : https://donghyeon.dev/junit/2021/04/11/JUnit5-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C/

 

JUnit5 완벽 가이드

시작하기전

donghyeon.dev

 

assertEquals(a, b); 객체 a,b의 값이 일치함을 확인
assertArrayEquals(a,b); 배열 a,b의 값이 일치함을 확인한다.
assertSame(a,b); 객체 a,b가 같은 객체임을 확인한다.
두 객체의 레퍼런스가 동일한가를 확인한다.
assertTrue(a); 조건 a가 참인가 확인한다.
assertNotNull(a); 객체 a가 null이 아님을 확인한다.