본문 바로가기
GD's IT Lectures : 기초부터 시리즈/스프링부트(Spring Boot) 기초부터 ~

[스프링 부트(SpringBoot) : 중급] 테스트 전략 및 심화

by GDNGY 2023. 5. 5.

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) : 중급] 스프링 시큐리티를 활용한 보안 강화

 

[스프링 부트(SpringBoot) : 중급] 스프링 시큐리티를 활용한 보안 강화

5. 스프링 시큐리티를 활용한 보안 강화 5.1. 비밀번호 저장 전략 비밀번호 저장 전략은 사용자의 비밀번호를 안전하게 저장하기 위한 방법입니다. 애플리케이션에 저장되는 비밀번호는 해싱(hash

gdngy.tistory.com

 

반응형

댓글