6. 테스트 전략 및 심화
6.1. 테스트 주도 개발(TDD)
테스트 주도 개발(Test-Driven Development, TDD)은 테스트를 중심으로 개발하는 방식으로, 테스트 케이스를 먼저 작성한 후 코드를 작성합니다. 이를 통해 코드 품질 향상과 버그 감소에 도움이 됩니다.
[TDD의 주요 단계]
- 실패하는 테스트 케이스 작성 : 먼저 테스트 케이스를 작성하여 실패하게 합니다.
- 테스트를 통과할 수 있는 최소한의 코드 작성 : 테스트를 통과할 수 있도록 최소한의 코드를 작성합니다.
- 코드를 리팩토링하면서 개선 : 테스트를 통과한 코드를 개선하고 리팩토링합니다.
예제 코드 (계산기 서비스 TDD)
// CalculatorTest.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class CalculatorTest {
@Autowired
private CalculatorService calculatorService;
@Test
public void testAddition() {
assertEquals(5, calculatorService.add(2, 3));
}
@Test
public void testSubtraction() {
assertEquals(1, calculatorService.subtract(3, 2));
}
// 기타 테스트 케이스 작성
}
6.2. 통합 테스트 작성
통합 테스트는 여러 컴포넌트가 올바르게 작동하는지 확인하는 테스트입니다. 스프링 부트에서는 @SpringBootTest 어노테이션을 사용하여 통합 테스트를 작성할 수 있습니다.
예제 코드 (통합 테스트 작성)
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class UserIntegrationTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
public void testCreateUser() {
User user = new User("testuser", "test@example.com");
ResponseEntity<User> response = restTemplate.postForEntity("/users", user, User.class);
assertEquals(HttpStatus.CREATED, response.getStatusCode());
assertNotNull(response.getBody().getId());
}
@Test
public void testGetUser() {
ResponseEntity<User> response = restTemplate.getForEntity("/users/1", User.class);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals("testuser", response.getBody().getUsername());
}
// 기타 테스트 케이스 작성
}
6.3. 테스트 커버리지 및 리포트 도구
테스트 커버리지는 코드의 어느 부분이 테스트되었는지 측정하는 지표입니다. Jacoco는 Java 코드의 테스트 커버리지를 측정하는 도구입니다.
Jacoco 설정 (Gradle)
plugins {
id 'jacoco'
}
jacocoTestReport {
reports {
xml.enabled true
html.enabled true
}
}
test {
finalizedBy jacocoTestReport
}
Jacoco 설정 (Maven)
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
SonarQube는 코드 품질과 커버리지를 시각화해 주는 도구입니다. SonarQube를 사용하려면 서버와 플러그인을 설정해야 합니다.
SonarQube 설정 (Gradle)
plugins {
id "org.sonarqube" version "3.3"
}
sonarqube {
properties {
property "sonar.host.url", "http://localhost:9000"
property "sonar.login", "your_sonarqube_token"
}
}
SonarQube 설정 (Maven)
<build>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.9.1.2184</version>
</plugin>
</plugins>
</build>
이제 테스트를 실행하고 커버리지 리포트를 생성할 수 있습니다. Jacoco 및 SonarQube를 통해 프로젝트의 테스트 커버리지를 확인하고 개선할 수 있습니다.
2023.05.05 - [프로그래밍/스프링부트(Spring Boot) 기초부터 ~] - [스프링 부트(SpringBoot) : 중급] 스프링 시큐리티를 활용한 보안 강화
반응형
'GD's IT Lectures : 기초부터 시리즈 > 스프링부트(Spring Boot) 기초부터 ~' 카테고리의 다른 글
[스프링 부트(SpringBoot) : 중급] 성능 최적화 및 모니터링 도구 (0) | 2023.05.05 |
---|---|
[스프링 부트(SpringBoot) : 중급] 클라우드 환경에서의 배포 (0) | 2023.05.05 |
[스프링 부트(SpringBoot) : 중급] 스프링 시큐리티를 활용한 보안 강화 (0) | 2023.05.05 |
[스프링 부트(SpringBoot) : 중급] RESTful API 개발 심화 (0) | 2023.05.05 |
[스프링 부트(SpringBoot) : 중급] 웹 개발 심화 (0) | 2023.05.05 |
댓글