Spring - Test Fixture

Test Fixture의 이해

Posted by Yan on November 15, 2023

Test Fixture

  • 여러 테스트에서 같은 데이터를 사용해야 할 때, 코드의 중복을 없애주는 역할을 하는 테스트 전용 데이터
  1. @org.junit.Before로 메소드에 주석을 달고 해당 메소드의 변수를 초기화한다. @Before, @BeforeClass
  2. @org.junit.After 로 메서드에 주석을 달아 setUp 에서 할당한 영구 리소스를 해제한다. @After, @AfterClass

어떨 때 사용하는지 예시

  • 목 또는 가짜 객체의 세팅이나 생성 그리고 삽입할 데이터의 준비
  • 구체적이며 알고있는 데이터를 지닌 데이터베이스 로딩
  • 테스트 픽스처를 만들어내는 특정 파일들을 복사하면 특정 상태로 초기화된 객체들 생성됨.

java-test-fixture

  • 테스트 픽스처는 일반적으로 테스트 중인 코드를 설정하거나 구성 요소 테스트를 용이하게 하는 유틸리티를 제공하는 데 사용된다.
  • Java 프로젝트에서는 또는 플러그인 java-test-fixtures외에 플러그인을 적용하여 테스트 픽스처 지원을 활성화할 수 있다.
1
2
3
4
5
6
7
8
9
lib/build.gradle
plugins {
    // A Java Library
    id 'java-library'
    // which produces test fixtures
    id 'java-test-fixtures'
    // and is published
    id 'maven-publish'
}

test fixture 사용 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Simpsons {
    private static final Person HOMER = new Person("Homer", "Simpson");
    private static final Person MARGE = new Person("Marjorie", "Simpson");
    private static final Person BART = new Person("Bartholomew", "Simpson");
    private static final Person LISA = new Person("Elisabeth Marie", "Simpson");
    private static final Person MAGGIE = new Person("Margaret Eve", "Simpson");
    private static final List<Person> FAMILY = new ArrayList<Person>() ;

    public static Person homer() { return HOMER; }

    public static Person marge() { return MARGE; }

    public static Person bart() { return BART; }

    public static Person lisa() { return LISA; }

    public static Person maggie() { return MAGGIE; }

    // ...

build.gradle

1
2
3
4
5
6
dependencies {
    implementation(project(":lib"))

    testImplementation 'junit:junit:4.13'
    testImplementation(testFixtures(project(":lib")))
}
reference

Gradle의 java-test-fixture 플러그인 junit4 cookbook Test fixtures