2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

스프링에서 테스트(Test) 환경을 설정하고 테스트를 수행하는 방법은?

_____
Q1: 스프링 애플리케이션에서 테스트 환경을 설정하려면 어떤 의존성을 추가해야 하나요?
A1: 스프링 부트 프로젝트에서는 보통 `spring-boot-starter-test` 의존성을 추가합니다. 이 스타터에는 JUnit, Mockito, AssertJ, Spring TestContext Framework 등이 포함되어 있어 테스트 작성에 필요한 대부분의 라이브러리를 제공합니다.
Maven 예시:
```xml

org.springframework.boot
spring-boot-starter-test
test

```

Q2: 스프링 테스트에서 기본으로 사용하는 테스트 러너(Test Runner)는 무엇인가요?
A2: 스프링 부트 2.4 이상부터는 기본적으로 JUnit 5(Jupiter)를 사용합니다. 기존에는 `@RunWith(SpringRunner.class)`를 썼지만, JUnit 5부터는 `@ExtendWith(SpringExtension.class)`가 사용됩니다. `@SpringBootTest` 애노테이션이 이를 내포하고 있어 별도 확장이 필요없습니다.

Q3: 스프링에서 통합 테스트 환경을 설정하려면 어떤 애노테이션을 사용하나요?
A3: `@SpringBootTest`를 사용합니다. 이 애노테이션은 애플리케이션 컨텍스트를 로딩하고 전체 스프링 환경을 구성하여 통합 테스트를 수행할 수 있게 합니다. 예:
```java
@SpringBootTest
public class MyServiceIntegrationTest {
// 테스트 코드
}
```

Q4: 특정 빈(Bean)만 테스트할 때는 어떻게 설정하나요?
A4: `@WebMvcTest`, `@DataJpaTest`, `@MockBean` 등 슬라이스 테스트(Slice Test) 애노테이션을 사용하면 필요한 영역의 빈만 로딩하여 가볍게 테스트할 수 있습니다. 예:
- `@WebMvcTest` : 컨트롤러 및 MVC 관련 빈만 로드
- `@DataJpaTest` : JPA 리포지토리 관련 빈만 로드 및 인메모리 DB 설정
- `@MockBean` : 특정 빈을 목(Mock) 빈으로 교체

Q5: 테스트 실행 시 애플리케이션 프로퍼티 설정을 다르게 하고 싶으면 어떻게 하나요?
A5: `@TestPropertySource` 애노테이션을 사용하거나, `@SpringBootTest(properties = "key=value")` 속성을 사용하면 테스트 시 커스텀 프로퍼티를 적용할 수 있습니다.
예:
```java
@SpringBootTest(properties = {"app.mode=test"})
@TestPropertySource(locations = "classpath:test.properties")
```

Q6: 테스트에서 특정 프로파일만 활성화하려면 어떻게 하나요?
A6: `@ActiveProfiles("test")` 애노테이션을 테스트 클래스에 붙이면 해당 프로파일이 활성화된 상태로 컨텍스트가 로딩됩니다.

Q7: 스프링 테스트에서 Mockito를 연동하려면 어떻게 해야 하나요?
A7: `@MockBean` 애노테이션을 사용하여 스프링 빈을 목 객체로 등록할 수 있습니다. 예:
```java
@MockBean
private MyRepository myRepository;
```
이를 통해 실제 빈 대신 가짜(목) 빈을 주입받아 테스트할 수 있습니다.

Q8: 테스트 데이터베이스를 별도로 사용하려면 어떻게 설정하나요?
A8: 테스트용 설정 파일(ex. `application-test.properties`)에 별도의 데이터베이스 연결 정보를 작성하고, 테스트 클래스에 `@ActiveProfiles("test")`를 지정하면 테스트 시 해당 설정을 사용합니다. 또는 `@DataJpaTest`와 같이 인메모리 DB(H2 등)를 자동으로 띄우는 슬라이스 테스트를 사용할 수 있습니다.

Q9: 테스트 실행 시 매번 새로운 애플리케이션 컨텍스트를 로딩하지 않도록 하는 방법은?
A9: 스프링 테스트는 기본적으로 캐시된 컨텍스트를 재사용합니다. 클래스타입과 활성 프로파일, 프로퍼티 등이 다르면 다른 컨텍스트를 로드하므로, 설정이 동일하다면 자동으로 재사용됩니다. `@DirtiesContext`가 붙으면 캐시 무효화가 발생하니 주의하세요.

Q10: 스프링 테스트 내에서 HTTP 요청 테스트는 어떻게 하나요?
A10: `@WebMvcTest` 또는 `@SpringBootTest(webEnvironment = WebEnvironment.MOCK)`와 함께 `MockMvc`를 사용해 컨트롤러 레벨에서 HTTP 요청을 시뮬레이션할 수 있습니다.
예:
```java
@Autowired
private MockMvc mockMvc;

@Test
public void testGetEndpoint() throws Exception {
mockMvc.perform(get("/api/data"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("test"));
}
```

---

요약하자면, 스프링 테스트 환경 설정은 `spring-boot-starter-test` 의존성 추가 → `@SpringBootTest` 또는 슬라이스 테스트 애노테이션 사용 → 목(Mock) 빈 설정 및 프로파일/프로퍼티 활용 → 필요한 테스트 도구(MockMvc 등) 활용 순서로 진행합니다.
스프링 프레임워크에서 테스트 환경을 설정하고 테스트를 수행하는 방법에 대해 알아보겠습니다.

스프링은 강력한 테스트 지원 기능을 제공하며, 이를 통해 애플리케이션의 다양한 구성 요소를 쉽게 테스트할 수 있습니다.

아래는 스프링에서 테스트 환경을 설정하고 테스트를 수행하는 기본적인 방법입니다.

1. 테스트 의존성 추가먼저, Maven 또는 Gradle을 사용하여 테스트 관련 의존성을 추가해야 합니다.

스프링 부트 프로젝트의 경우, `spring-boot-starter-test` 의존성을 추가하면 됩니다.

Maven 예시: ```xml org.springframework.boot spring-boot-starter-test test``` Gradle 예시: ```groovytestImplementation 'org.springframework.boot:spring-boot-starter-test'```

2. 테스트 클래스 작성스프링에서는 JUnit과 Mockito를 사용하여 테스트를 작성할 수 있습니다.

테스트 클래스는 `@SpringBootTest` 애너테이션을 사용하여 스프링 컨텍스트를 로드합니다.

```javaimport org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import static org.assertj.core.api.Assertions.assertThat;@SpringBootTestpublic class MyServiceTest { @Autowired private MyService myService; @Test public void testServiceMethod() { String result = myService.someMethod(); assertThat(result).isEqualTo("Expected Result"); }}```

3. Mocking 사용하기스프링에서는 Mockito를 사용하여 의존성을 모킹(mocking)할 수 있습니다.

`@MockBean` 애너테이션을 사용하여 테스트 중에 특정 빈을 모킹할 수 있습니다.

```javaimport org.junit.jupiter.api.Test;import org.mockito.Mockito;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.boot.test.mock.mockito.MockBean;@SpringBootTestpublic class MyServiceTest { @Autowired private MyService myService; @MockBean private DependencyService dependencyService; @Test public void testServiceMethodWithMock() { Mockito.when(dependencyService.someMethod()).thenReturn("Mocked Result"); String result = myService.someMethod(); assertThat(result).isEqualTo("Expected Result"); }}```

4. 통합 테스트스프링에서는 통합 테스트를 쉽게 수행할 수 있습니다.

`@SpringBootTest` 애너테이션을 사용하면 전체 애플리케이션 컨텍스트를 로드하여 실제 데이터베이스와의 통신을 포함한 테스트를 수행할 수 있습니다.

```java@SpringBootTest@AutoConfigureMockMvcpublic class MyControllerTest { @Autowired private MockMvc mockMvc; @Test public void testGetEndpoint() throws Exception { mockMvc.perform(get("/api/resource")) .andExpect(status().isOk()) .andExpect(content().string(containsString("Expected Content"))); }}```

5. 테스트 실행테스트는 IDE에서 직접 실행하거나, Maven 또는 Gradle을 통해 커맨드라인에서 실행할 수 있습니다.

- Maven: `mvn test`- Gradle: `gradle test`

6. 테스트 커버리지 확인JUnit과 함께 Jacoco와 같은 도구를 사용하여 테스트 커버리지를 확인할 수 있습니다.

Maven 또는 Gradle에서 Jacoco 플러그인을 설정하여 테스트 커버리지를 쉽게 분석할 수 있습니다.

결론스프링에서 테스트 환경을 설정하고 테스트를 수행하는 것은 비교적 간단합니다.

위에서 설명한 방법을 통해 단위 테스트와 통합 테스트를 작성하고 실행할 수 있습니다.

테스트는 애플리케이션의 품질을 보장하는 중요한 과정이므로, 적극적으로 활용하는 것이 좋습니다.

작성자: ㅁㅁ [비회원] | 작성일자: 1년 전 2024-08-26 08:20:38
조회수: 239 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.