728x90
반응형
Springboot는 기본적으로 JUnit을 지원한다.
JUnit은 자바에서 가장 널리 사용되는 단위 테스트 프레임워크다.
테스트 주도 개발(TDD: Test-Driven Development)의 핵심 도구로, 개발자가 소프트웨어를 개발하는 과정에서 발생할 수 있는 버그를 사전에 잡아내는 것을 돕는다.
주요기능은 다음과 같다.
1. TestCase
- 테스트의 기본단위로, 한 번에 하나의 조건을 검사한다.
- 각각의 테스트 케이스는 독립적으로 실행되며, 다른 테스트 케이스에 영향을 미치지 않아야 한다.
2. Test Suite
- 여러 테스트 케이스를 그룹화한 것이다.
- 테스트 케이스들을 한 번에 실행할 수 있다.
3. Assertion
- 코드가 예상한 대로 동작하는지 검증하기 위해 사용된다.
- ex. assertEquals(expected,actual) 메소드는 실제 값이 예상한 값과 같은지 확인한다.
4. Setup and Teardown
- Setup은 각 테스트 케이스 실행 전에 준비 작업을 수행한다.
- Teardown은 테스트 케이스 실행 후에 정리 작업을 수행한다.
- JUnit에서는 @Before, @After 어노테이션을 사용하여 Setup과 Teardown 메소드를 정의한다.
5. Annotation
- JUnit은 다양한 어노테이션을 제공하여 테스트 코드를 작성하는데 도움을 준다.
- ex. @Test 어노테이션은 메소드가 테스트 케이스임을 나타냄, @Ignore 어노테이션은 해당 테스트 케이스를 실행하지 않도록 한다.
JUnit5 부터는 @BeforeEach, @AfterEach, @BeforeAll, @AfterAll 등의 새로운 어노테이션이 추가되었다.
- 각각 테스트 메소드 실행 전/후, 모든 테스트 메소드 실행 전/후 수행될 메소드를 정의
이런 기능들을 이용하여 JUnit은 개발자가 코드의 정확성을 확신할 수 있게 도와준다.
또한, 리팩토링이나 기능 추가 등의 작업을 할 때도 기존 기능이 올바르게 동작하는지 확인하는 데 큰 도움이 된다.
Springboot에서 사용시 build.gradle.kt에 다음을 추가해야한다.
testImplementation("org.springframework.boot:spring-boot-starter-test")
일반적으로 Springboot에서 Junit을 사용하여 test를 할 때는 Mock을 사용한다.
Mock은 테스트 시 실제 구현 대신 사용되는 가짜 객체로 Mock 객체는 원하는 방식으로 동작하도록 프로그래밍되어 있고, 실제 의존성을 가지지 않고도 테스트를 수행할 수 있다.
Mock MVC
- Spring MVC Application Testing을 위해 사용되는 클래스(MockMvc)
- 이 클래스를 사용해 실제 Servlet 컨테이너를 실행하지 않고도, Spring MVC의 동작을 모방하여 HTTP 요청과 응답을 테스트 할 수 있다.
- MockMvc는 Application의 Controller와 Client 사이에 위치, 클라이언트로부터의 요청을 받아서 Controller에 전달하고, 그 결과를 다시 Client에게 반환한다.
- 이 과정에서 발생하는 모든 데이터는 메모리 상에 저장되기 때문에 테스트 시간을 크게 줄일 수 있다.
- Spring Test 모듈의 MockMvcBuilders를 사용하면 MockMvc 인스턴스를 쉽게 생성할 수 있다.(ex. standaloneSetup()를 사용하면 특정 Controller만을 대상으로 하는 MockMvc를 만들 수 있다.)
예시
package com.springboot.kotlinexample
import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
import org.springframework.test.web.servlet.MockMvc
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.*
@SpringBootTest
@AutoConfigureMockMvc
class KotlinexampleControllerTests {
@Autowired
private lateinit var mockMvc: MockMvc
@Test
fun `getAllUsers returns index view`() {
mockMvc.perform(get("/users"))
.andExpect(status().isOk)
.andExpect(view().name("index"))
}
}
728x90
반응형
'Back-end & Server > Spring Boot with Kotlin' 카테고리의 다른 글
[Spring Boot] Thymeleaf (0) | 2024.03.28 |
---|---|
[Spring Boot] JSP(Java Server Pages) (0) | 2024.03.28 |
[Spring Boot] JPA(Java Persistence API) (0) | 2024.03.27 |
[Spring Boot] DAO, DTO (0) | 2024.03.27 |
[Spring Boot] MVC(Model, View, Controller) (0) | 2024.03.25 |