프로그래밍에서 "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과 매처를 사용하면, 복잡한 조건을 간결하게 표현하고 가독성 좋은 실패 메시지를 제공할 수 있습니다.
'Programing > JAVA' 카테고리의 다른 글
리팩토링...java... (0) | 2023.08.06 |
---|---|
테스트 주도 개발(TDD)_예제를 통한 설명 (0) | 2023.07.28 |
SPRING의 DI를 나만 이해하기쉽게.. (0) | 2023.07.28 |
java 파라미터 바인딩이란 (0) | 2023.07.28 |
Java의 toCharArray() 메소드 이해하기: 예제와 함께 배우는 String을 char 배열로 변환하는 방법 (0) | 2023.06.26 |