2017-11-09 4 views
1

나는 종종 다른 유형의 테스트를 작성합니다. 테스트 유형에 따라 설정이 다를 수 있습니다. 예를 들어IntelliJ 아이디어 : 조건에 따라 JUnit 테스트 클래스 템플릿

내 모든 서비스 테스트는 클래스 선언에서 다음 주석을했다 :

@RunWith(SpringRunner.class) 
@WithMockUser 
@WebMvcTest(controllers = MyController.class) 

또 다른 테스트 등,

을 다른 설정을 가지고 :

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = NONE) 

모든 컨트롤러 테스트는 이러한 주석이

시험을 만들 때마다 다른 부분에서이 부분을 복사하여 붙여 넣어야합니다.

IntelliJ Idea에서이 프로세스를 자동화하는 데 도움이되는 솔루션을 찾고 있습니다.

Q :JUnit Test Class 템플릿은 테스트 유형에 따라 다르게 작동하는 템플릿을 정의 할 수 있습니까? 클래스 이름은 "컨트롤러"로 끝나는 경우, 하나의 템플릿을 사용해야의 생성 된 테스트 - -

의 클래스 이름이 "서비스"단어로 끝나는 말을하자 다른 하나를 사용해야 그 시험 등 그것은 할 수도 있습니다

패키지 이름이나 클래스 내용과 같은 다른 조건에 따라 테스트 유형을 탐지합니다.

+1

나는 그것이 가능하지 않다고 생각합니다. 나는 "보통"@ RunWith 등을 삽입하기 위해 개인적으로 [ "라이브 템플릿"] (https://www.jetbrains.com/help/idea/creating-code-constructs-by-live-templates.html)을 사용하거나 다른 것들 –

+0

@RC 나는 그것에 대해 감사하지 않았다 –

답변

5

JUnit 코드 생성 템플릿은 설정> 파일 및 코드 템플릿> 코드에서 찾을 수 있습니다.

실제로 별도의 코드 템플릿을 만들 수는 없지만 기존 템플릿에 논리를 추가하면됩니다. Velocity 기반 지시문을 사용합니다.

import static org.junit.Assert.*; 
#parse("File Header.java") 

public class ${NAME} { 
    ${BODY} 
} 

우리는 다음에 수정할 수 있습니다 : 다음과 같은 경우 그래서, 예를 들어, 우리는 기존의 JUnit 4 템플릿을

import static org.junit.Assert.*; 
#if($CLASS_NAME.contains("Service")) 
//Import whatever you need for services here. 
#end 
#if($CLASS_NAME.contains("Controller")) 
//Import whatever you need for controllers here. 
#end 
#parse("File Header.java") 
#if($CLASS_NAME.contains("Controller")) 
#set($CLASS_SUFFIX = ".class") 
@RunWith(SpringRunner.class) 
@RunWithMock 
@WebMvcTest(controllers = $CLASS_NAME$CLASS_SUFFIX) 
#end 
#if($CLASS_NAME.contains("Service")) 
@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = NONE) 
#end 
public class ${NAME} { 
    ${BODY} 
} 

이 방법 당신은을 통해 새로운 JUnit 4에서는 테스트 클래스를 생성하는 경우 테스트 할 클래스의 클래스 이름에 alt 키를 입력하여 새 테스트를 생성하십시오. 테스트 할 클래스의 이름에 'Controller'또는 'Service'가 포함되어 있으면 다른 출력을 생성합니다. 사용하는 이름 지정 규칙에 따라 contains 대신 endswith로 변경할 수 있습니다. 두 경우 모두 실제 가져 오기 문을 생략했지만 추가 할 수는있을 것입니다.

+2

이것은 멋지다 :) –