🌱JAVA/Spring

[Spring Boot] 단위 테스트 코드 작성 (JUnit 5)

뉴발자 2024. 1. 2.
728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

그림 1-1. JUnit 5

 

Unit 테스트

Java에서 지원하는 JUnit 프레임워크를 이용해 단위 테스트를 실시하는 것을 Unit 테스트라고 한다.

 

@Test 어노테이션이 붙은 함수 및 메소드를 테스트하는 것이다.

 

Spring에서 단위 테스트를 하는 것은 Spring 컨테이너에 올라간 Bean들을 테스트하는 것이다.

 

단위 테스트를 하는 이유는 작성이 간편해 빠르게 테스트가 가능하고, 불필요한 리소스를 낭비하지 않을 수 있다.

 

 

JUnit5 어노테이션

@Test

JUnit은 각각의 테스트가 서로 영향을 주지 않고 독립적으로 실행되는 것을 원칙으로 한다.

 

따라서 테스트(메소드)마다 객체를 별도로 생성한다.

 

JUnit4에서는 메소드의 접근제한자를 public으로 선언해야 사용할 수 있었다.

 

JUnit5로 넘어온 후 접근제한자가 Default여도 된다.

@Test
void testMethod1() {
  System.out.println("Test Method1");
}

@Test
void testMethod2() {
  System.out.println("Test Method2");
}

 

 

@BeforeEach

@BeforeEach 어노테이션이 선언된 메소드는 @Test 메소드가 실행되기 전에 반드시 실행한다.

 

보통 공통으로 사용하는 코드를 @BeforeEach 메소드에 선언한다. 

 

JUnit 4의 @Before 어노테이션과 같은 기능을 한다.

@BeforeEach
void beforeEachMethod() {
  System.out.println("BeforeEach Method");
}

 

 

@BeforeAll

@BeforeAll 어노테이션이 선언된 메소드는 해당 테스트 클래스를 초기화할 때 딱 한 번만 실행한다.

 

메서드 시그니쳐는 static으로 선언해야한다.

@BeforeAll
static void beforeAllMethod() {
  System.out.println("BeforeAll Method");
}

 

 

@AfterEach

@AfterEach 어노테이션이 선언된 메소드는 @Test 메소드가 실행되고 후 반드시 실행한다.

 

JUnit 4의 @After 어노테이션과 같은 기능을 한다.

@AfterEach
static void afterEachMethod() {
  System.out.println("AfterEach Method");
}

 

 

@AfterAll

@AfterAll 어노테이션이 선언된 메소드는 해당 테스트 클래스 내 테스트 메서드를 모두 실행한 후 딱 한 번만 실행한다.

 

메서드 시그니쳐는 static으로 선언해야한다.

@AfterAll
static void afterAllMethod() {
  System.out.println("AfterAll Method");
}

 

 

@Disabled

@Disabled 어노테이션이 선언된 메소드는 테스트 시 실행되지 않는다.

 

@Disabled 어노테이션을 사용하지 않아도 @Test 어노테이션을 주석처리하면 테스트 메서드는 실행되지 않는다.

 

JUnit4의 @Ignore 어노테이션과 같은 기능을 한다.

@Disabled
void disabledMethod() {
  System.out.println("Disabled Method");
}
728x90

 

 

테스트 코드

매개변수로 숫자 2개를 받고 두 수를 더한 값을 리턴해주는 간단한 테스트 코드를 작성해보겠다.

 

TestController.java

@RestController
@RequiredArgsConstructor
public class TestController {
  
  private final TestService testService;
  
  @GetMapping("/test")
  public int sum(int num1, int num2) {
    return testService.sum(num1, num2);
  }
}

 

 

TestService.java

public interface TestService {
  int sum(int num1, int num2);
}

 

 

TestServiceImpl.java

@Service
public class TestServiceImpl implements TestService {
  @Override
  public int sum(int num1, int num2) {
    return num1 + num2;
  }
}

 

 

TestApplicationTests.java

@SpringBootTest
class TestApplicationTests {

	@Autowired
	private TestService testService;

	@Test
	void test() {
		int result = testService.sum(1, 2);

		System.out.println("sum : " + result);
	}
}

 

 

테스트 결과

그림 2-1. 테스트 결과

 

 

 

 

 

 

 

 

 

 

728x90

댓글