티스토리 뷰

반응형

IntelliJ Live Template

IntelliJ에 Live Template 기능을 이용하면 공통적으로 혹은 반복적으로 작성되는 코드를 지정해두었다가 빠르게 삽입하는 기능을 말한다.
자세한 기능에 대한 설명은 아래 영상으로 갈음한다. :)

 

 

Live Template으로 테스트 코드 작성하기

Live Template기능은 이전부터 알고 있었는데, 필요성을 느끼지 못하고 사용하지 않다가 반복적인 테스크 코드 구조를 짜다가 드디어 현타가 오고 말았다.

모든 테스트 코드를 자동으로 할 순 없지만, 매번 import 하는 과정을 줄일 수 있었고 @MethodSource를 활용한 테스트 코드는 템플릿으로 등록해 두면 편하게 작성할 수 있다. 개인이나 팀마다 테스트 코드를 작성하는 방식이 조금씩 다르나 Live Template 기능을 어떤식으로 사용하고 있는지 확인하는 정도로 봐주시면 좋겠다. (+ 관련한 더 좋은 팁이 있으시면 공유도 꼭 부탁드립니다.)

 

테스트 클래스 기본 설정하기

샘플 클래스의 테스트를 작성해보았다. 'extm' 명령어로 MockitoExtension을 등록해두었다.

 

테스트 객체의 이름은 회사에서 dut(Device Under Test)라는 약자를 주로 사용하기 때문에 'dut'로 등록했다. 실제 프로덕션 클래스와 테스트 클래스의 패키지 명이 같고 프로덕션 클래스명 + Test를 붙이는 관례(CoC)를 사용해서 테스트 클래스를 찾는다.

 

Live Template을 파보면서 놀랬던점은 groovyScript를 사용해서 생각보다 많은 마법(?)을 부릴 수 있게 해준다. 만약 TDD가 아닌 프로덕션 코드가 먼저 완성 된 경우 의존 객체들을 자동으로 입력 받도록 했다. 생성자 정보를 가져와서 파라미터 타입과 이름을 추론 했다. @Mock이외에 @MockBean, @Autorwired 혹은 애노테이션이 없는 템플릿까지 모두 등록해두었다.

 

@BeforeEach는 매 테스트 마다 작성하진 않지만 템플릿으로 등록해두는 것이 편하다.

 

테스트 코드 작성하기

'test' 명령으로 기본 테스트 메소드의 템플릿을 정의해두었다. Live Template에서 IntelliJ code completion 옵션을 사용할 수 있는데 이를 사용하여 dut 객체의 메소드 목록을 바로 확인할 수 있다. 테스트 명은 실행된 메소드명 + '_test' 로 자동 등록된다.

 

템플릿에 미리 사용할 구현체를 선언하여 테스트 코드를 작성할 때 import 선언 과정없이 매끄럽게 작성 할 수 있다. 특히 나같은 경우는 assertThat()은 assertJ의 API를 사용하지만 assertThrow()나 assertDoesNotThrow()는 junit jupiter에서 제공하는 API를 사용하기 때문에 유용하게 사용하고 있다.

 

자주쓰는 any()나 anyLong() 같은 경우도 모두 등록해두었고, IntelliJ code completion 옵션을 사용하여서 예상되는 클래스명을 바로 입력할 수 있게 설정했다.

 

@MethodSource를 활용한 @ParameterizedTest 테스트 코드 템플릿 예제

 

 

혹시 써보고 싶으시다면..

https://github.com/siyoon210/intellij-junit-live-templates

등록한 LiveTemaplate settings를 올려두었으니 사용하고 싶다면 File | Manage IDE Settings | Import Settings 에서 업로드한 settings.zip 파일을 입력해주자. 정상적으로 입력되면 Live Template 목록에 아래와 같은 템플릿들을 확인 할 수 있다.

 

반응형
댓글