인프런
강의 마무리
date
Mar 22, 2025
slug
test-on-spring-with-architecture-7
status
Public
tags
테스트를 추가하고 싶은 개발자들의 오답노트
author
summary
[테스트를 추가하고 싶은 개발자들의 오답노트] 강의 정리
type
Post
thumbnail
updatedAt
Mar 24, 2025 01:19 PM
category
인프런
📝 강의 정리테스트의 범위RIGHT-BICEPBoundary conditions테스트 팁[1]. ParameterizedTest( JUnit5 이상 )[2]. assertAll[3]. 한 개의 테스트는 한 개만 테스트한다[4]. Thread.sleep[4]. FIRST 원칙📎 출처
📝 강의 정리
테스트의 범위
- 무엇을 테스트 해야 할 지 모를 때, RIGHT-BICEP 원칙을 생각하자
RIGHT-BICEP
- RIGHT : 결과가 올바른가?
- Boundary conditions
- Inversion relationship
- Cross check
- Error conditions
- Performance Characteristics
Boundary conditions
- Boundary conditions : 경계 조건은 맞는가
- corner case : 시스템 내/외부 조건에 의해 발생하는 특이 케이스( 서버의 메모리,, )
- edge case : 입력의 양 끝단과 같은 특별한 케이스
→ 시스템 내부 조건에 의해 발생하는 특이 케이스( 변수 값의 범위)
- CORRECT
- Conformance: 데이터 형식이 제대로 됐는가
- Ordering: 데이터 순서가 적합한가
- Range: 최댓값, 최솟값일 때도 시스템의 의도대로 동작하는가
- 덧셈 함수가 Long.MAX + Long.MAX일 때 어떻게 동작하는지
- Reference: 협력 객체의 상태에 따라 시스템의 의도대로 동작하는가
- 휴면 사용자를 초대하기 했을 때 어떻게 동작하는지
- Existence: 값이 존재할 때와 없을 때를 테스트
- 입력값 null, 0, “”일 때 어떻게 동작하는지
- Cardinaity: 값이 충분히 존재할 때와 그렇지 않을 때
- Time: 시간 순서가 제대로 지켜지는 지
- 병렬 처리 시, 메시지 순서가 제대로 처리되는지
테스트 팁
[1]. ParameterizedTest( JUnit5 이상 )
- 동일 로직을 여러번 돌리고 싶을 때
- input값과 대조값을 배열로 생성 후 loop 하는 방식은
어디서 에러가 발생하는지 확인이 어렵다
@ParameterizedTest @MethodSource("provideValidInputs") void testValidCalculation(long num1, char operator, long num2, long expected) throws Exception { // given // when long result = calculator.calculate(num1, operator, num2); // then assertEquals(result, expected); } private static Stream<Arguments> provideValidInputs() { return Stream.of( Arguments.of(1, "+", 2, 3), Arguments.of(123, "+", 234, 357), Arguments.of(111, "+", 222, 333), Arguments.of(100, "-", 50, 50), Arguments.of(10, "/", 2, 5), Arguments.of(6, "*", 50, 300) ); }
[2]. assertAll
- 여러 assert문을 검증할 때, 중간에 실패해도 모든 assert문을 돌릴 수 있는 방법
- 에러 지점 파악도 가능하다
assertAll( () -> assertThat1(), () -> assertThat2() );
[3]. 한 개의 테스트는 한 개만 테스트한다
- assert가 하나라는 뜻은 아니다~
[4]. Thread.sleep
- Thread.sleep을 이용해 테스트를 진행한다면, 데스크탑 성능에 따라 테스트 결과가 달라질 수 있다.
Thread.join
- Thread가 정확히 끝나는 지점
- 범용적으로 사용하기 어렵다
Awaitility
- 나중에 정리해보기
[4]. FIRST 원칙
- Fast
- Independent
- Repeatable
- Self-validating
- Timely