본문 바로가기

Spring/Test

테스트 주도 개발 시작하기 - TDD 시작, TDD 암호 검사기 2 1. 네 번째 테스트 값이 없는 경우 - 예외상황을 고려하지 않으면 비정상 작동 - 값이 없는 경우에 대해서 알맞은 동작이 되도록 테스트 해야함 - 값이 없는 경우에는 어떻게 작동해야 할 지 고민 필요, IllegalArgumentException 발생 시키거나, 유효하지 않은 암호를 의미하는 PasswordStrength.INVALID를 리턴하게 할 수 있음(코드는 후자의 방법으로 진행) 1) 테스트 코드 추가 import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class PasswordStreng.. 더보기
테스트 주도 개발 시작하기 - TDD 시작, TDD 암호 검사기 1 구현할 기능: 암호 검사기 검사 규칙 길이가 8자 이상 0 ~9 숫자를 포함 대문자 포함 암호 강도 3개 규칙 모두 충족 시 암호는 강함 2개 규칙 충족 시 암호는 보통 1개 규칙 충족 시 암호는 약함 1. 첫 번째 테스트 가장 쉽거나 가장 예외적인 상황을 선택해야 함 모든 규칙을 충족하는 경우, 모든 조건을 충족하지 않은 경우 중 모든 규칙을 충족하는 경우를 먼저 테스트 왜? 모든 규칙을 충족시키지 않는 경우 테스트를 통과시키려면 각 조건을 검사하는 코드를 모두 구현해야 하므로 한 번에 만들어야 할 코드가 많아지고 시간이 길어짐 -> 사실상 구현을 다 하고 테스트 하는 방식과 큰 차별점이 없음 1) 테스트 코드 구현 import org.junit.jupiter.api.DisplayName; import.. 더보기
테스트 주도 개발 시작하기 - TDD 시작, TDD란 1. 기능을 검증하는 테스트 코드 작성 import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class CalculatorTest { @Test // @Test어노테이션을 붙인 plus()메소드를 테스트 메소드로 인식 void plus() { // 기능을 검증 할 plus()메소드 int sum = Calculator.plus(1, 2); // 계산 기능을 실행하는 코드 작성 assertEquals(3, sum); // 결과가 기대한 값인지 검증, assertEquals(기대값, 실제값) 두 값이 같지 않으면 AssertionFailedError 발생 } } Caculator.. 더보기
📝 테스트 코드 작성의 장/단점과 테스트 범위에 따른 분류 1. 테스트 코드 작성의 장단점 장점 예상 동작과 실제 동작을 비교하여 빠르고 정확한 테스트가 가능하기 때문에 초기 개발의 디버깅이 쉬워짐 어플리케이션이 확장, 리팩터링 등 변경되더라도 올바르게 작동하는지 확인 할 수 있음 단위 테스트 자체를 어플리케이션에 대한 문서로 사용할 수 있음 단점 테스트 코드까지 작성해야하기 때문에 개발시간이 오래걸림 테스트코드 유지보수 비용 발생 2. 테스트 코드 범위에 따른 분류 1)단위 테스트(Unit Test) - 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트 강점 - 어디에서 문제가 발생했는지 빨리 파악할 수 있어 디버깅 시간을 단축시켜줌 - 일부 의존 대상은 스텁이나 모의객체 등을 이용해서 대역으로 테스트함 2) 통합 테스트(Intergarati.. 더보기
테스트 코드와 제이유닛(JUnit) 1. JUnit이란? 자바 프로그래밍 언어용 단위 테스트 프레임워크 2. JUnit 5 모듈 구성 1) JUnit 플랫폼: 테스팅 프레임 워크를 구동하기 위한 런처와 테스트 엔진을 위한 API 제공 2) JUnit 주피터(Jupiter): JUnit5를 위한 테스트 API와 실행 엔진을 제공 (api 모듈 / prams 모듈 / engine 모듈 포함) 3) JUnit 빈티지(Vintage): JUnit3, JUnit4로 작성된 테스트를 JUnit5 플랫폼에서 실행하기 위한 모듈 제공 * build.gradle 파일을 보면 JUnit 사용을 위한 환경설정이 이미 되어 있음 2. @Test 어노테이션 테스트로 사용할 클래스를 만들고 @Test 어노테이션을 메서드에 붙이면 됨 - 테스트 클래스명은 주로 접미.. 더보기
Mock object를 이용한 단위 테스트 1. Mock object (가짜 객체)? 이상적으로, 각 테스트 케이스는 서로 분리되어야 한다. 이를 위해 가짜 객체(Mock object)를 생성하는 것도 좋은 방법이다. 2. Mock object 를 왜 사용할까? 분리 되기 어려운 클래스들을 각각 테스트 하기 위해 사용 Controller 클래스만 테스트 하기 위한 테스트 범위: Controller, Service, Repository Service 클래스만 테스트 하기 위한 테스트범위: Service, Repository Repository 클래스만 테스트 하기 위한 테스트 범위: Repository 3. Mock object 를 통한 분리 Mock object: 실제 객체와 동일한 클래스명, 함수명이 있는 실제 객체와 겉만 같은 객체 MockR.. 더보기
TDD (Test-Driven Development) 테스트 주도 개발 1. TDD (Test-Driven Development) 테스트 주도 개발의 의미 테스트가 개발을 주도해 나가는 것 2. TDD의 흐름 1) 기존 개발의 흐름(AS-IS) 설계 → 개발 → 테스트 (→ 설계 수정) 2) TDD의 흐름(TO-BE) 설계 → 테스트 (→설계 수정) → 개발 - 기능을 검증하는 테스트를 먼저 작성 - 작성한 테스트를 통과하지 못하면 테스트를 통과할 만큼만 코드 작성 - 테스트 통과 후 개선할 코드가 있으면 리팩토링 - 리팩토링 후 다시 테스트를 실행하여 기존 기능이 잘 되고 있는지 확인 필수 -> 위 과정을 반복하여 점진적으로 기능을 완성해 나가는 것이 TDD의 흐름 3) 레드(Red)-그린(Green)-리팩터(Refactor) - TDD 사이클을 레드-그린-리팩터로 부르기.. 더보기
Edge 케이스를 고려한 단위 테스트 다양한 Edge 케이스 고려해 보기 입력 가능한 모든 케이스를 고려해 보기 Edge 케이스 발견 후 처리방법 Edge 케이스에 대해 개발자가 독단적으로 방향을 결정하는 것보다는, 관련 담당자(들)과 협의 진행 후 결정합니다. 관련 담당자: 관련 개발팀, 기획자, 디자이너, QA 예를들면, 에러 발생으로 결정 정확한 에러문구 필요 (문구의 통일성, 글로벌 서비스의 경우 번역 고려) 부적절한 문구의 예: "헐.. 빈 문자열을 입력하시면 레알 멘붕!!" 빈 문자열 허용 DB 에는 빈 문자열 ("") UI 에 표시할 때는 "알 수 없음" 으로 표시 → 프론트엔드 개발 필요 빈 이미지 허용 UI 에 대체 이미지 표시 → 디자이너, 프론트엔드 개발 작업이 필요 Edge 케이스를 고려한 코드 수정 Edge 케이스 처.. 더보기