GitHub
  • set DSL API

    AutoParams의 10.3.1 버전 릴리스에는 형 안정적으로 매개변수를 지정하는 set 메서드가 새롭게 추가됐다. 이 글은 기존 방식과 새롭게 추가된 set DSL의 차이점과 사용법을 설명한다.

  • @Size 애노테이션 사용 컬렉션 크기 지정

    AutoParams는 컬렉션 형식 인자를 생성할 때 기본적으로 3개의 요소를 포함한다. 많은 경우 이 기본 크기로 충분하지만, 테스트 대상에 따라 더 크거나 더 작은 컬렉션이 필요한 경우도 있다. Factory<T> 클래스나 @Customization 애노테이션을 사용해서 컬렉션 크기를 조절할 수 있지만, 10.1.1 버전 릴리스@Size 애노테이션을 사용해 컬렉션을 생성할 때 크기를 지정할 수 있는 기능이 추가되었다.

  • 매개변수 이름에 의존하는 AutoParams 기능 사용

    Java는 기본적으로 바이트코드에 매개변수 이름을 포함하지 않는다. 그렇기 때문에 일부 매개변수 이름에 의존하는 AutoParams 기능이 제대로 작동하려면 다음 방법 중 하나를 사용해야 한다:

  • @AutoParams 애노테이션

    AutoParams를 처음 만들기 시작할 당시, JUnit 5의 @Test 메서드는 매개변수를 가질 수 없고 매개변수가 있는 테스트는 반드시 @ParameterizedTest를 사용해야 한다고 오해했다. 이런 인식 때문에 @ParameterizedTest와 함께 사용할 수 있는 @AutoSource 애노테이션을 만들었고, 이후 AutoParams의 기능은 이 @AutoSource 애노테이션을 중심으로 확장되었다.

    하지만 시간이 지나고 JUnit 5 API에 대한 이해가 깊어지면서, @Test 메서드도 매개변수를 가질 수 있고, 이를 지원하는 확장 기능을 구현할 수 있다는 점을 알게 되었다.

    이런 배경에서 10.0.0 버전 릴리스에서는 @Test 메서드에 사용할 수 있는 @AutoParams 애노테이션이 새로 추가되었다.

  • @UseBeans 애노테이션을 사용한 AutoParams와 Spring 테스트 통합

    AutoParams의 핵심 모듈은 Spring에 전혀 의존하지 않는다. 이 점은 AutoParams를 다양한 환경에서 가볍게 사용할 수 있다는 장점이 되지만, Spring 기반 테스트에서는 조금 불편함을 유발하기도 한다.

    예를 들어, 테스트 메서드에서 AutoParams가 자동으로 생성해주는 테스트 데이터와 함께 Spring 빈을 매개변수로 받고 싶을 때가 있다. 하지만 별도의 조치를 하지 않으면 AutoParams는 Spring 빈을 직접 생성하려고 시도하고, 이 과정에서 오류가 발생하게 된다.

    이 글은 이 문제를 해결하는 기존의 방식과 10.0.0 버전 릴리스에 추가된 @UseBeans 애노테이션을 사용하는 방식을 비교 설명한다.

  • AutoParams에 도입된 DSL(Domain-Specific Language)

    AutoParams의 10.0.0 버전 릴리스에는 처음으로 DSL(domain-specific language)이 도입됐다. 이 버전에 추가된 DSL은 테스트 데이터를 생성할 때 매개변수 인자를 고정하는 몇 가지 간결한 방법을 제공한다. 이 글은 DSL 사용 사례를 하나를 소개하고 기존 방식과의 차이를 비교한다.