inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Practical Testing: 실용적인 테스트 가이드

테스트 케이스 세분화하기

경계값 테스트 케이스 세분화하기에 대해 궁급합니다!

132

카드캡터솔쨩

작성한 질문수 2

0

안녕하세요

강의에서

// CafeKiosk.java
    public void add(Beverage beverage, int count) {
        if (count < 0) {
            throw new IllegalArgumentException("음료는 1잔 이상 주문하실 수 있습니다.");
        }

        for (int i = 0; i < count; i++) {
            beverages.add(beverage);
        }
    }

해당 메소드에 대한 단위테스트를 만드는데 궁금증이 생겨서 질문을 남겨봅니다.

 

[질문] 경계값(0, -1)에 대해서도 테스트 케이스를 세분화해서 만들어야 되는건가?

// 예시 
   // 경계값 0에 대한 테스트 함수
   @Test
    void addZeroBeverages() {
    ... (생략)
    }

   // 경계값 -1에 대한 테스트 함수
   @Test
    void addNegativeOneBeverages() {
    ... (생략)
    }

아니면 테스트 케이스 하나를 만들어서 그안에 값을 변경하면서 테스트해야되는건지 궁급합니다!

// 예시    
   @Test
    void addZeroAndNegativeOneBeverages() {
    ... (생략)
        // 0값 체크 후 테스트 통과하면 1로 고쳐서 테스트 
        assertThatThrownBy(() -> cafeKiosk.add(americano, 0))
                .isInstanceOf(IllegalAccessError.class) 
                .hasMessage("음료는 1잔 이상 주문하실 수 있습니다."); 
    }

spring tdd jpa mockito 소프트웨어-테스트 junit5

답변 2

0

박우빈

안녕하세요, 카드캡터솔쨩 님!

테스트 코드를 작성하는 것은 결국 사람이 테스트하던 일을 자동화하기 위함이기 때문에, 값을 매번 수동으로 바꿔가면서 테스트하는 것은 적절하지는 않아보여요 ㅎㅎ
결론적으로 경계값이라고 생각하는 값에 대해 테스트 케이스를 나누어 작성해주시면 됩니다.

만약 테스트 케이스는 하나(주제가 하나)라고 생각이 드는데 경계값은 여러 개인 경우, ParameterizedTest 등을 활용해볼 수도 있으니 참고해 주세요.

도움이 되셨기를 바랍니다.
감사합니다 🙂

0

카드캡터솔쨩

안녕하세요 우빈 쌤

ParameterizedTest를 활용한 테스트를 찾아서 적용해보았는데

너무 도움이 되었습니다.

감사합니다!!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

카드캡터솔쨩님, 테스트 케이스를 세분화하는 것은 실제로 코드가 다양한 경계 조건에서 제대로 작동하는지를 검증하는 데 중요합니다. 일반적으로 모든 경계값에 대해서 개별적인 테스트 케이스를 작성하는 것이 권장됩니다. 이렇게 하면 더 명확하게 어떤 조건에서 테스트가 실패하고 성공하는지를 확인할 수 있습니다.

따라서 경계값인 0과 -1에 대해 각각 별도의 테스트 함수를 작성하는 것이 좋습니다. 이는 테스트의 가독성과 유지보수성을 높이는 데도 도움이 됩니다.

// 0에 대한 테스트
@Test
void addZeroBeverages() {
    assertThatThrownBy(() -> cafeKiosk.add(americano, 0))
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessage("음료는 1잔 이상 주문하실 수 있습니다.");
}

// -1에 대한 테스트
@Test
void addNegativeOneBeverages() {
    assertThatThrownBy(() -> cafeKiosk.add(americano, -1))
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessage("음료는 1잔 이상 주문하실 수 있습니다.");
}

이렇게 각각의 경계값에 대해 테스트를 작성하는 것이 더욱 바람직하며, 테스트 결과를 더 명확히 확인할 수 있습니다.

좀 더 자세한 내용은 Spring Boot Testing Documentation도 참고하시면 도움이 될 것입니다.

private 상수 테스트 관련 질문

0

87

1

void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??

0

128

2

커버리지는 어떻게 활용하시는지 궁금합니다.

0

163

2

테스트 문서화 질문입니다

0

107

2

단위테스트 질문이 있습니다

0

96

2

컨트롤러는 모킹을 한 이유가 궁금합니다.

0

106

2

ERD 가장자리에 있는 도메인 테스트 질문

0

90

2

DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?

0

136

2

OrderCreateRequest DTO에 대해서 궁금한점

0

104

2

고전파의 테스트 대역 사용 대상, 공유 의존성

0

157

2

계층 관련 질문이 있습니다.

0

140

3

'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다

1

124

2

혹시 update 로직은 어떻게 테스트하나요? (@Setter?)

0

135

2

단위테스트와 통합테스트의 경계가 궁금합니다.

0

235

2

Service+Repository 통합테스트 관련 질문입니다.

0

151

2

OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요

0

186

2

test 용 .yml

0

91

2

throws Exception

0

81

2

카페키오스크 클래스 문의 ,,

0

90

2

Rest docs 문서용 테스트코드를 따로 작성해야 되나요?

0

176

2

테스트 코드에서 필요한 생성자

0

139

1

tearDown 순서

0

116

2

@Builder 생성자 private

0

137

2

@DisplayName gradle / intellJ

0

94

2