전체 글(89)
-
변하지 않는 코드 분리하기
템플릿(Template) : 어떤 목적을 위해 미리 만들어둔 모양이 있는 틀, 고정된 틀 안에 바꿀 수 있는 부분을 넣어서 사용하도록 만들어진 오브젝트 템플릿 메소드 패턴 : 고정된 틀의 로직을 가진 템플릿 메소드를 슈퍼클래스에 두고, 바뀌는 부분을 서브클래스의 메소드에 두는 구조로 이뤄진다. public BigDecimal getExRate(String currency) { String url = "https://open.er-api.com/v6/latest/"+ currency; return runApiForExRate(url); } private static BigDecimal runApiForExRate(String url) { URI uri; ..
2024.07.10 -
변하는 코드 분리하기 - 메소드 추출
WebApiExRateProvider의 구성1. URI를 준비하고 예외처리를 위한 작업을 하는 코드2. API를 실행하고, 서버로부터 받은 응답을 가져오는 코드3. JSON 문자열을 파싱하고 필요한 환율정보를 추출하는 코드 2. API를 실행하고, 서버로부터 받은 응답을 가져오는 코드 = API를 호출하는 기술과 방법이 변경될 수 있음3.JSON 문자열을 파싱하고 필요한 환율정보를 추출하는 코드 = API 응답의 JSON구조에 따라 정보 추출하는 방식이 변경 메소드 추출하기 private static BigDecimal parseExRate(String response) throws JsonProcessingException { ObjectMapper mapper = new Objec..
2024.07.10 -
도메인 오브젝트 테스트
도메인 모델 아키텍처 패턴도메인 로직, 비즈니스 로직을 어디에 둘 지를 결정하는 패턴 트랜잭션 스크립트 - 서비스 메소드 (PaymentService.prepare) 도메인 모델 - 도메인 모델 오브젝트(Payment) Paymentpackage tobyspring.hellospring.payment;import java.math.BigDecimal;import java.time.LocalDateTime;public class Payment { private Long orderId; private String currency; private BigDecimal foreignCurrenyAmount; //돈과같은 정확한 소수점 계산을 위한 자료형 private BigDecimal ex..
2024.07.08 -
학습 테스트(Learning Test)
- 직접 만들지 않은 코드, 라이브러리, 레거시 시스템에 대한 테스트- 테스트 대상의 사용방법을 익히고 동작방식을 확인하는데 유용하다- 외부 기술, 서비스가 버전이 올라갔을 때 이전과 동일하게 동작하는지 확인할 수도 있다. 1. 2. 3. package tobyspring.hellospring.payment;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.Test;import java.io.IOException;import java.math.BigDecimal;import java.time.Clock;import java.time.Instant;import j..
2024.07.08 -
테스트와 DI
수동 DI를 이용하는 테스트테스트용 협력자(Collaborator) / 의존 오브젝트를 테스트 대상에 직접 주입하고 테스트 스프링 DI를 이용하는 테스트테스트용 협력자(Collaborator) / 의존 오브젝트를 스프링의 구성 정보를 이용해서 지정하고 컨테이너로부터 테스트 대상을 가져와서 테스트@ContextConfiguration@Autowired package tobyspring.hellospring.payment;import org.junit.jupiter.api.DisplayName;import org.junit.jupiter.api.Test;import org.junit.jupiter.api.extension.ExtendWith;import org.springframework.beans.fac..
2024.07.08 -
테스트
자동으로 수행되는 테스트수동으로 개발한 코드를 테스트 하는 방법은 번거롭고 활용하는데 한계가 있다.코드로 만들어져 언제든 실행해서 테스트할 수 있는 자동으로 수행되는 테스트가 필요하다. 이를 통해서 지속적인 개선과 점진적인 개발이 가능해진다. 수동 테스트의 한계1. 프린트된 메시지를 수동으로 확인하는 방법은 불편하다2. 사용자 웹 UI까지 개발한 뒤에 확인하는 방법은 테스트가 실패했을 때 확인할 코드가 많다3. 테스트할 대상이 많아질 수록 검증하는데 시간이 많이 걸리고 부정확함 개발자가 만드는 테스트개발한 코드에 대한 검증 기능을 코드로 작성한다자동으로 테스트를 수행하고 결과를 확인한다테스팅 프레임워크를 활용한다테스트 작성과 실행도 개발 과정의 일부이다테스트를 코드로 만들고 자동으로 수행되는 테스트를 실..
2024.07.06