Spring

[Spring] SpringMVC junit5 Test 설정 방법

JooFunFun 2024. 7. 2. 14:39

오늘은 SpringMVC Junit5 Test 환경 설정을 하는 방법에 대한 기록을 남기려고 한다.

springBoot에 대한 Junit 설정에 대한 글은 많은데 SpringMVC에 대한 내용은 많이 없어서, 하나씩 찾아가면서 작업을 했다.(일명 삽질... 같이 해준 직장 동료분께 매우매우 감사함을 느낀다. 덕분에 많이 알게 됐다!)

 

이번에 junit5를 설정하면서 느낀 점은 생성자 의존성 주입이 가장 중요한 것 같다.

결국 설정을 잘 해줘야 테스트 코드 작성에 문제가 없다..

 

▶ 프로젝트 환경

1. SpringMVC 프로젝트(spring-webmvc version : 5.3.15)

2. buildTool은 gradle 사용 

3. 환경변수(local = 로컬환경, dev = 개발환경, prd = 운영환경) 별로 Properties 설정 값들이 다르게 설정돼 있음. ( ex) application-${env}.properties, database-${env}.properties)

4. IDEA : Intellij


 

1. Dependencies 설정 

	testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
	testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
	testImplementation group: 'org.springframework', name: 'spring-test', version: '5.3.15'
	testImplementation group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1'
  • junit5 부터는 junit-jupiter라는 라이브러리를 동해서 사용할 수 있다.
  • 추가로 MVC패턴의 테스트를 위해서 testImplementation에 servlet-api 라이브러리를 추가했다.

 

2. Test 코드 작성 시 추가할 Annotation

@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = {
        "file:src/main/~~~/~servlet.xml",
        "file:src/main/~~~/~datasource.xml"
})
@TestPropertySource(locations = {
        "file:src/main/~~~/application-local.properties",
        "file:src/main/~~~/database-local.properties"
})
@EnabledIfEnvironmentVariable(named = "env", matches = "local")
public class testCode {

	@Autowired
	AbcService abcService;
    
	@Test
	@Tag("test")
	public void testStart() {
		System.out.println("abcService = " + abcService.getData());
	}
}
  • @ExtendWith(springExtension.class) : Junit5 테스트 사용을 하기 위해 선언한다.
  • @ContextConfiguration : 통합 테스트를 위해 로드하고 구성하는 방법을 결정, 즉 locations 안에 있는 xml 파일을 읽어서 테스트 설정을 구축 한다. locations 안에는 xml 파일이나 Groovy script가 들어갈 수 있다.
  • @TestPropertySource : 테스트 환경에 사용할 properties 파일을 설정할 수 있다.
  • @EnabledIfEnvironmentVariable : 환경변수 값을 지정한다. named 환경 변수명, matches  환경 변수의 값, 해당 Annotation은 gradle 빌드시 정상적인 빌드를 위해 추가했다. (gradle 이 빌드할 때 테스트 데이터에 대한 값을 빌드를 한다. 현재 구축되어있는 테스트 코드의 환경설정이 환경변수 값에 따라서 다르게 들어가기 때문에, 빌드할 때는 "local"에 대한 환경변수값이 들어간 상태로 빌드가 되도록 임의로 설정하였다. 환경변수 값을 지정하지 않으면 gradle 빌드시 오류가 발생한다.)
  • @Test : Test 코드라는 것을 선언.
  • @Tag : Tag라는 Annotation을 사용하면 각 태그에 대한 테스트만 진행할 수 있다. 해당 내용은 3번에서 추가로 기록하겠다.

 

  • 추가 (Controller까지 테스트가 필요한 경우 >> 해당 내용은 실제 테스트를 해보지는 않았다. 추후 WebAppConfiguration까지 사용하는 날이오면 그때 다시 기록을 해야겠다.)
    • @WebAppConfiguration : 테스트 환경에 웹 에플리케이션 루트 경로에 대한 기본값(리소스 기본 경로)에 대한 "file:src/main/webapp"의 기본값을 사용하기 위한 Annotation이다.

 

3. Tag를 이용한 테스트 진행 

먼저 Tag를 이용한 테스트 진행을 위해 해당 Intellij 기준을 기록 하면, 실행/디버그의 구성편집 이라는 곳으로 들어간다.

실행 디버그의 구성편집

 

실행 디버그 구성에 JUnit을 눌러서 새로운 Junit 템플릿을 만들어준다.

JUnit 새로운 템플릿

 

노란색 표시한 부분들을 "태그", "태그명", "환경변수" 를 변경해준다.

참고로 태그명은 @Tag에 입력했었던 명과 동일하게 맞춰준다.

실행/디버그 구성

이렇게 설정을 하면, @Tag("test")라고 선언한 메서드 또는 클래스인 테스트 코드만 실행시킬 수 있다.

해당 @Tag로 인해 매우 편하게 테스트를 진행할 수 있다!

 

 

 

 

참고 자료

https://delusidiot.tistory.com/170

 

JUnit5 조건에 따라 테스트 실행하기

테스트를 진행하다보면 특정 조건에 맞도록 테스트하는 과정도 필요합니다. 환경변수에 따라 실행되어야 하는 테스트가 있을 수 있고 properties에 설정된 값에 맞도록 실행되어야 하는 테스트 그

delusidiot.tistory.com

https://mystria.github.io/archivers/spring-mvc-test-junit-testng

 

Spring MVC를 테스트하는 방법 « Personal Tech Note

Spring MVC를 어떻게 테스트 해야 할까? 보통 테스트를 입문할 때는 아주 간단한 POJO 클래스를 만들고 한 눈에 이해되는 메소드를 테스트 한다. 대충 메소드 하나에 파라메터 두어 개를 넣고 돌려받

mystria.github.io

https://junit.org/junit5/docs/current/user-guide/#writing-tests

 

JUnit 5 User Guide

Although the JUnit Jupiter programming model and extension model do not support JUnit 4 features such as Rules and Runners natively, it is not expected that source code maintainers will need to update all of their existing tests, test extensions, and custo

junit.org

https://docs.spring.io/spring-framework/docs/5.3.15/reference/html/testing.html#integration-testing-annotations-spring

 

Testing

The classes in this example show the use of named hierarchy levels in order to merge the configuration for specific levels in a context hierarchy. BaseTests defines two levels in the hierarchy, parent and child. ExtendedTests extends BaseTests and instruct

docs.spring.io