본문 바로가기
Framework/✔️JUnit5

TDD를 위한 JUnit5 사용법 1 - JUnit5 개요 및 Naming Annotation

by 발개발자 2022. 8. 14.
반응형

TDD를 수행하기 위해 아직 미흡하다 생각하는 테스트 코드 작성에 관해 강의를 들으며 내용을 정리해보자!

 

 

  • JUnit5

Intelij개발사인 Jetbrain survery에 따르면 자바 개발자가 가장 많이 사용하는 테스팅 프레임워크다.

자바 8이상을 필요로 하며 Spring 2.2버전으로 올리면서 JUnit4에서 JUnit5로 Default Test Framework 변경 되었다.

 

뭐가 달라졌는데?

 

JUnit4 하나의 jar파일로 들어오고 다른 라이브러리를 참조하는 형태였는데, JUnit5부터는 자체모듈화를 통해 기능을 활성화.

 

  • JUinit5 모듈
  • Platform : 테스트를 실행해주는 런처 제공 및 TestEngine API 제공
  • Jupiter : Junit 5를 지원하는 TestEngine API 구현체
  • Vintage : Junit 4와 3을 지원하는 TestEngine 구현체

 

 

그렇다면 이제 Junit5 직접 사용해보자.

 

테스트만 사용하니, https://start.spring.io/ 에서 Spring WEB 의존성을 추가한 프로젝트를 생성해보자.

 

자 이제, 테스트를 하기 앞서, JUnit5에서 테스트에 지원하는 annotation 대해 알아보자.

 

  • @Test : 실제 테스트를 진행하는 코드
  • @BeforeAll : @Test가 시작되기전에 한번 호출. private 불가 default 가능 ,반드시 static method로 사용
  • @AfterAll : @Test가 실행된 이후 한번 호출함. 마찬가지로 static
  • @BeforeEach :각각의 @Test를 실행할 때마다 시작하기전에 호출
  • @AfterEach :각각의 @Test를 실행할 때마다 실행된 이후 호출
class StudyTest {

	@Test
	void create() {
		Study study = new Study();
		assertNotNull(study);
		System.out.println("create!");
	}
	
	@Test
	@Disabled // Test 실행 방지 annotation
	void findAll() {
		System.out.println("find All");
	}
	
	@BeforeAll // @Test가 시작되기전에 한번 호출함. private 불가 default 가능 ,반드시 static method로 사용
	static void beforeAction() {
		System.out.println("beforeAction");
	}
	
	@AfterAll // @Test가 실행된 이후 한번 호출함. 마찬가지로 static
	static void afterAction() {
		System.out.println("afterAction");
	}
	
	@BeforeEach //각각의 @Test를 실행할 때마다 시작하기전에 호출함.
	void beforeActionEach() {
		System.out.println("beforeAction Each");
	}
	
	@AfterEach //각각의 @Test를 실행할 때마다 실행된 이후 호출함.
	void afterActionEach() {
		System.out.println("afterAction Each");
	}
	

}

실제 수행 결과 값

 

Junit 5 테스트 naming을 지원하는 Annotation

 

@DisplayNameGeneration

  • Method Class 레퍼런스를 사용해서 테스트 이름을 표기하는 방법 설정.
  • 기본 구현체로 ReplaceUnderscores 제공

 

@DisplayName

  • 어떤 테스트인지 테스트 이름을 보다 쉽게 표현할 있는 방법을 제공하는 annotation.
  • @DisplayNameGeneration 보다 우선 순위가 높다.

기본적으로 TestCode 작성할 Method명을 SnakeCase 작성하는 경우가 많다.

@DisplayNameGeneration 사용하여 구현체인 ReplaceUnderscores 클래스를 참조하면 자동으로 언더바를 공백으로 치환시켜준다.

 

@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
class StudyTest {

	@Test
	@DisplayName("스터디 만들기 ")
	void create_new_study() {
		Study study = new Study();
		assertNotNull(study);
		System.out.println("create!");
	}
	
	@Test
	@DisplayName("조회하기")
	void find_all() {
		System.out.println("find All");
	}
	
	@BeforeAll // @Test가 시작되기전에 한번 호출함. private 불가 default 가능 ,반드시 static method로 사용
	static void beforeAction() {
		System.out.println("beforeAction");
	}
	
	@AfterAll // @Test가 실행된 이후 한번 호출함. 마찬가지로 static
	static void afterAction() {
		System.out.println("afterAction");
	}
	
	@BeforeEach //각각의 @Test를 실행할 때마다 시작하기전에 호출함.
	void beforeActionEach() {
		System.out.println("beforeAction Each");
	}
	
	@AfterEach //각각의 @Test를 실행할 때마다 실행된 이후 호출함.
	void afterActionEach() {
		System.out.println("afterAction Each");
	}
	

}

 

DisplayNameGeneration 수행 값 snake_case to space

 

@DisplayName method 한글 공백 자유롭게 표현할 있으며, 개발자의 의도를 명확하게 표현해줄 있어 권장되는 annotaion

 

DisplayName 수행 값

 

위와같이 JUnit5에서 주로 사용하는 Annotation에 대해 알아보았다. 

기본적인 내용으로 Annotation을 통한 TestCode 작성을 위한 기반을 만들었으니, 

다음 포스팅에서 Assertion을 사용한 실제 TestCode를 작성해보자!

끗!

반응형

댓글