Post
EN

Gradle `java-test-fixtures` plugin

Gradle의 java-test-fixtures 플러그인은 테스트 픽스처(test fixtures)를 정의하고 관리하는 데 도움이 되는 플러그인입니다. 테스트 픽스처란 여러 테스트 또는 프로젝트 간에 공유될 수 있는 테스트용 도메인 객체, 유틸리티 메서드, 가짜 객체나 테스트용 설정 같은 것들을 의미합니다.

java-test-fixtures 플러그인을 사용하면 테스트 픽스처를 별도의 소스 세트로 분리하여, 테스트에만 사용되는 코드를 메인 코드와 격리시킬 수 있습니다. 이렇게 격리된 테스트 픽스처는 다른 프로젝트에서도 재사용할 수 있습니다.

사용법:

1. 플러그인 적용하기

build.gradle 파일에 java-test-fixtures 플러그인을 적용합니다.

plugin { ... `java-test-fixtures` }

또는 이전 버전의 Gradle을 사용하는 경우, apply 구문을 사용하여 플러그인을 적용시킬 수 있습니다.

2. 테스트 픽스처 소스 세트 생성하기

java-test-fixtures 플러그인이 적용되면, 프로젝트에 testFixtures 소스 세트가 자동으로 추가됩니다.

src/ ├── main/ │ ├── java/ │ └── resources/ ├── test/ │ ├── java/ │ └── resources/ └── testFixtures/ ├── java/ // 테스트 픽스처용 자바 소스 파일 └── resources/ // 테스트 픽스처용 리소스 파일

3. 테스트 픽스처 코드 작성하기

src/testFixtures/java 디렉토리 내에 테스트 픽스처용 코드를 작성합니다. 이 코드는 다른 테스트에서 재사용될 수 있습니다.

4. 테스트 픽스처 사용하기

다른 프로젝트에서 이 테스트 픽스처를 사용하고 싶다면, 해당 프로젝트의 build.gradle 파일에서 의존성을 추가합니다.

my-module은 테스트 픽스처를 정의한 모듈의 이름으로 대체해야 하며, 이를 통해 해당 모듈의 테스트 픽스처를 다른 모듈의 테스트에서 사용할 수 있게 됩니다.

5. 빌드 및 테스트 실행

프로젝트를 빌드하고 테스트를 실행하면, testFixtures 소스 세트 내의 코드가 테스트 컴파일과 실행 과정에서 사용됩니다.

java-test-fixtures 플러그인 사용을 통해 테스트 코드의 중복을 최소화하고, 코드 재사용성을 높일 수 있습니다. 이는 크고 복잡한 프로젝트나 여러 프로젝트 간에 테스트 코드를 공유할 때 특히 유용합니다.

Gradle Kotlin DSL을 사용하여 java-test-fixtures 플러그인을 프로젝트에 적용하고, 테스트 픽스처를 설정하는 방법은 다음과 같습니다.

먼저, build.gradle.kts 파일에 java-test-fixtures 플러그인을 적용합니다:

Test Fixture를 작성하게되면, 위의 소개와 같이 Test에 사용할 Fixture를 별도의 경로로 리소스를 생성하고 관리할 수 있을 것 같다.

gradle kts

plugins { // 기존의 Java 플러그인과 함께 java-test-fixtures 플러그인을 적용합니다. java `java-test-fixtures` } dependencies { // 기본적인 테스트 의존성을 추가합니다. testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0") // 다른 모듈의 테스트 픽스처를 사용하는 경우 해당 모듈의 테스트 픽스처를 의존성으로 추가합니다. // testFixturesImplementation(project(":other-module")) } // 테스트 픽스처 소스 세트 내에서 사용할 추가 설정이나 의존성이 있다면 여기에 구성합니다. sourceSets["testFixtures"] { java.srcDir("src/testFixtures/java") resources.srcDir("src/testFixtures/resources") }

`testFixtures 소스 세트는 기본적으로 생성되므로 sourceSets[“testFixtures”] 블록은 생략할 수 있습니다. 하지만, 특정 소스 디렉토리나 리소스 디렉토리를 추가하고 싶을 때 이 블록을 사용할 수 있습니다.

이제 src/testFixtures/java** 디렉토리에 재사용 가능한 테스트 픽스처 코드를 작성할 수 있습니다. 예를 들어, 테스트 도메인 객체나 모의(Mock) 객체를 이곳에 배치할 수 있습니다.**

다른 모듈에서 이 테스트 픽스처를 사용하려면, 해당 모듈의 build.gradle.kts 파일에 다음과 같은 의존성을 추가합니다:

dependencies { // 'testImplementation' 대신 'testFixturesApi'를 사용하여 테스트 픽스처를 추가합니다. testImplementation(testFixtures(project(":my-module"))) }

이 코드 스니펫은 현재 모듈의 테스트 중에 :my-module 모듈의 테스트 픽스처를 사용할 수 있도록 설정합니다.

java-test-fixtures** 플러그인을 사용하면, 테스트 코드 간에 공통적으로 사용되는 코드를 중앙화하고 재사용성을 높일 수 있어 프로젝트의 유지보수성을 향상시킬 수 있습니다.**

24.04.15

Gradle에서 testFixtures 소스 세트를 설정하는 것은 특히 큰 프로젝트나, 여러 모듈 간에 공통된 테스트 유틸리티나 데이터를 공유해야 할 때 매우 유용합니다. 이런 경우 테스트 코드 중복을 줄이고, 테스트 관리를 좀 더 효율적으로 할 수 있습니다.

일반적인 사용 사례

테스트 픽스처는 주로 다음과 같은 경우에 사용됩니다:

- 공통 테스트 유틸리티와 클래스 공유: 여러 모듈 또는 프로젝트에서 공통으로 사용되는 테스트 클래스나 유틸리티 함수를 testFixtures 소스 세트에 넣어 관리합니다.

- 테스트 데이터: 공통 테스트 데이터 파일이나 설정 파일을 중앙에서 관리할 수 있습니다.

- 통합 테스트 설정: 여러 모듈에 걸쳐 사용되는 복잡한 통합 테스트 환경을 설정하는 데 사용됩니다.

Gradle 설정

testFixtures를 사용하기 위해 sourceSets를 설정하는 것은 특히 Java와 Kotlin 프로젝트에서 일반적입니다. Gradle 5.6 이상에서는 java-test-fixtures 플러그인을 사용하여 이를 보다 쉽게 설정할 수 있습니다. 이 플러그인을 사용하면 testFixtures 소스 세트를 더 명시적으로 관리할 수 있으며, 해당 소스 세트를 다른 프로젝트에서 의존성으로 쉽게 추가할 수 있습니다.

plugins { // Java 프로젝트에 테스트 픽스처 플러그인을 적용 id("java-test-fixtures") } dependencies { testImplementation(testFixtures("someOtherProject")) }

위 코드에서 java-test-fixtures 플러그인을 적용하면, 자동으로 testFixtures 소스 세트가 생성되고, testFixtures의 의존성을 다른 프로젝트에서 쉽게 사용할 수 있도록 합니다.

결론

sourceSets을 사용하여 testFixtures를 설정하는 것은 일반적인 방법 중 하나이며, 특히 대규모 프로젝트나 여러 모듈이 상호 작용하는 복잡한 프로젝트 환경에서 매우 유용합니다. 이 방식을 통해 테스트 코드의 재사용성을 높이고, 유지 관리를 보다 효율적으로 수행할 수 있습니다.

디렉토리가 설정이 안되서 찾아봤던 것인데, 문제는 내가 디렉토리명을 잘못 입력함..

testFixtures <— 로 디렉토리를 걸어줘야 함

그리고 testFixture에 작성된 코드에 의존성 라이브러리를 넣어주는 방법은 아래와 같이 지시해서 입력해야 함

testFixturesImplementation(libs.testcontainers.mysql) testFixturesImplementation(libs.spring.boot.starter.test)

의존성 주입이 안되서 -_-; 계속 삽을 푸고 있었음

This article is licensed under CC BY 4.0 by the author.