본문으로 바로가기

setup() 메서드

category Programing/JAVA 2023. 7. 28. 17:59
반응형

프로그래밍에서 "setup" 메서드는 테스트 또는 애플리케이션을 실행하기 전에 필요한 초기화 작업을 수행하는 메서드를 말합니다.

특히 단위 테스트 프레임워크(예: Junit, PyTest 등)에서는 각 테스트 케이스를 실행하기 전에 공통적으로 수행해야 하는 초기화 작업이 있을 수 있습니다. 이러한 작업을 "setup" 메서드에서 수행합니다.

예를 들어, JUnit에서는 @BeforeEach 애너테이션이 붙은 메서드가 setup 메서드 역할을 합니다. 이 메서드는 각 테스트 메서드가 실행되기 전에 매번 호출됩니다.

public class ExampleTest {

    private SomeObject someObject;

    @BeforeEach
    public void setup() {
        someObject = new SomeObject();
        someObject.initializeWithSomeData();
    }

    @Test
    public void testSomeBehavior() {
        // 이제 someObject는 초기화되어 사용할 준비가 되었습니다.
    }
}

이런 방식으로, setup 메서드를 통해 테스트가 실행되기 전에 반복적으로 수행해야 하는 작업을 한 곳에 모아서 관리할 수 있습니다. 이는 테스트 코드의 중복을 줄이고 가독성을 향상시키는 데 도움이 됩니다.

====setup() 메서드를 사용한 간단한 예제는?

아래에는 간단한 Calculator 클래스와 이에 대한 테스트 케이스를 포함하는 CalculatorTest 클래스를 작성한 예제가 있습니다. 이 테스트 클래스에서는 setup 메서드를 사용하여 각 테스트가 실행되기 전에 Calculator 인스턴스를 초기화합니다.

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public int subtract(int a, int b) {
        return a - b;
    }
}

아래는 위 Calculator 클래스에 대한 테스트 케이스를 작성한 CalculatorTest 클래스입니다:

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorTest {
    private Calculator calculator;

    @BeforeEach
    public void setup() {
        calculator = new Calculator();
    }

    @Test
    public void testAdd() {
        int result = calculator.add(2, 3);
        assertEquals(5, result);
    }

    @Test
    public void testSubtract() {
        int result = calculator.subtract(5, 3);
        assertEquals(2, result);
    }
}

위 코드에서 setup 메서드는 @BeforeEach 애너테이션이 붙어 있으므로 각 테스트 메서드(testAdd, testSubtract)가 실행되기 전에 항상 호출됩니다. 따라서 각 테스트 메서드는 독립적으로 실행될 수 있으며, 각 테스트는 새로 생성된 Calculator 인스턴스를 사용합니다.

이 테스트코드에서 작성된 assertEquals는?

Unit에서 제공하는 assertEquals 메서드는 두 개의 값을 비교하고, 두 값이 동일하지 않을 경우 테스트를 실패로 표시하는 단정(assertion) 메서드입니다. 첫 번째 인자로 예상되는 값(expected value)을, 두 번째 인자로 실제 값(actual value)을 전달합니다. 만약 두 값이 동일하지 않다면, 테스트는 실패하고 해당 실패 정보가 테스트 결과에 포함됩니다.

예를 들어, assertEquals(5, result)는 result가 5와 동일한지를 검사하고, 동일하지 않을 경우 테스트를 실패로 표시합니다.

반면에 assertThat은 더 유연한 매칭과 가독성 좋은 실패 메시지를 제공하기 위해 주로 사용되는 Hamcrest 라이브러리의 메서드입니다. assertThat은 첫 번째 인자로 테스트 대상의 실제 값, 두 번째 인자로 "매처(matcher)"를 받습니다. 매처는 검사하려는 조건을 표현합니다.

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;

// ...

@Test
public void testAdd() {
    int result = calculator.add(2, 3);
    assertThat(result, is(5));
}

위 코드에서 assertThat(result, is(5))는 result가 5와 동일한지를 검사하며, 동일하지 않을 경우 테스트를 실패로 표시합니다. is는 Hamcrest의 매처 중 하나로, 주어진 값이 특정 값과 동일한지를 검사합니다.

이와 같이 assertThat과 매처를 사용하면, 복잡한 조건을 간결하게 표현하고 가독성 좋은 실패 메시지를 제공할 수 있습니다.

반응형