본문 바로가기

TDD6

[테스트 주도 개발 시작하기] 11장 ~ 부록 마치며 테스트 코드 회귀 테스트로 사용 가능 안전장치가 되어, 변경한 코드로 인해 소프트웨어가 비정상적으로 동작하는 것을 사전에 방지해줌 버그 수정도 쉬워짐 회귀 테스트 Regression test 개발하고 테스트한 소프트웨어의 기존 코드가 이후에 수정돼도 올바르게 동작하는지 확인하기 위함 레거시 코드에 대한 테스트 추가 약간의 위험을 감수하더라도 테스트 코드를 만들 수 있게 리팩토링 감행하거나 테스트 코드 만들고 싶은 코드를 별도 클래스로 분리 ➡️ 테스트할 코드의 범위 줄어듦 JUnit 5 추가 내용 조건에 따른 테스트 @EnabledOnOs: 특정 운영체제에서만 동작 @DisabledOnOs: 실행하지 않을 운영체제 지정 @Test @EnabledOnOs(OS.WINDOWS) ... @Test @E.. 2023. 6. 22.
[테스트 주도 개발 시작하기] 9 ~ 10장 테스트 범위와 종류 테스트 범위 테스트 관련 용어 문맥이나 사용자에 따라 의미가 다를 때도 있음 통합 테스트 : 개발 완료 후 진행하는 최종 테스트 인수 테스트 : 고객 입장에서 요구한 기능을 올바르게 구현했는지 수행하는 테스트 or 요건을 완료했는지 정의하기 위해 작성한 테스트 기능 테스트 Functional Testing 사용자 입장에서 시스템이 제공하는 기능이 올바르게 동작하는지 확인 시스템을 구동 및 사용하는데 필요한 모든 구성 요소 필요 e.g. 회원 가입 기능 작동 테스트 웹 서버, 데이터베이스, 웹 브라우저 필요 (+ 문자 발송 기능 필요하다면 외부 문자 발송 서비스도 필요) 사용자가 직접 사용하는 웹 브라우저나 모바일 앱부터 시작해, 데이터베이스나 외부 서비스에 이르기까지 모든 구성 요소를.. 2023. 6. 22.
[테스트 주도 개발 시작하기] 7 ~ 8장 대역 대역의 필요성 외부 요인이 테스트에 관여하는 예시 테스트 대상에서 파일 시스템 사용 테스트 대상에서 DB 로부터 데이터를 조회하거나 데이터를 추가 테스트 대상에서 외부의 HTTP 서버와 통신 Double 대역 test double = 테스트에서 진짜 대신 사용할 대역 테스트 대상에서 의존하는 요인 때문에 테스트가 어려울 때 대역 사용 = 스턴트들처럼 외부 요인으로 인해 테스트가 어려울 때 외부 요인을 대신하는 대역 사용 대역을 이용한 테스트 단순 구현으로 실제 구현 대체함 public class AutoDebitRegister_Stub_Test { private AutoDebitRegister register; private StubCardNumberValidator stubValidator; //.. 2023. 6. 15.
[테스트 주도 개발 시작하기] 5 ~ 6장 JUnit 5 기초 JUnit 5 구성요소 JUnit 플랫폼 : 테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API 제공 JUnit 주피터(Jupiter) : JUnit 5 를 위한 테스트 API 와 실행 엔진 제공 JUnit 빈티지(Vintage) : JUnit 3 & 4로 작성된 테스트를 JUnit 5 플랫폼에서 실행하기 위한 모듈 제공 @Test & 테스트 메서드 @Test 테스트 실행할 메서드에 붙임 해당 메서드는 private 이면 안됨 주요 단언 메서드 Assertions 클래스가 제공하는 주요 단언 메서드 메서드 설명 assertEquals(expected, actual) 실제 값(actual)이 기대하는 값(expected)과 같은지 검사 assertNotEquals(une.. 2023. 6. 14.
[테스트 주도 개발 시작하기] 3 ~ 4장 테스트 코드 작성 순서 테스트 코드 작성 순서 쉬운 경우 ➡️ 어려운 경우 예외적인 경우 ➡️ 정상인 경우 구현하기 쉬운 테스트부터 시작하기 모든 조건을 충족하는 경우 한 규칙 or 두 규칙을 충족하는 경우 모든 조건을 충족하지 않는 경우 예외 상황을 먼저 테스트하기 예외 상황에 따른 if-else 구조를 미리 만들어, 코드 구조 단순화 완급 조절 테스트 ➡️ 구현 ➡️ 확인 정해진 값 리턴 값 비교를 이용해 정해진 값 리턴 다양한 테스트 추가하며 구현을 일반화 특정 테스트만 통과하도록 테스트 코드 작성 상수를 비교해 테스트 통과 상수 제거 후 일반화 @Test void meetsOtherCriteria_except_for_Length_Then_Normal() { PasswordStrengthMeter .. 2023. 6. 13.
[테스트 주도 개발 시작하기] 1 ~ 2장 TDD 개발 준비 TDD Test-Driven Development 테스트 주도 개발 IDE 내에서 테스트 실행 public class StringTest { @Test void substring() { String str = "abcde"; assertEquals("cd", str.substring(2, 4)); } } 터미널에서 테스트 실행 # mvn command $ mvn test # maven test execution $ mvnw # maven wrapper # gradle command $ gradle test # gradle test execution $ gradlew # gradle wrapper TDD 시작 TDD 테스트 ➡️ 구현 테스트를 먼저 한다 = 기능이 올바르게 작동하는지 검증.. 2023. 6. 13.