본문 바로가기

전체 글187

아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라 1. 생성자 체이닝과 자바빈즈 public class NutritionFacts { private final int servingSize; // (mL, 1회 제공량) 필수 private final int servings; // (회, 총 n회 제공량) 필수 private final int calories; // (1회 제공량당) 선택 private final int fat; // (g/1회 제공량) 선택 private final int sodium; // (mg/1회 제공량) 선택 private final int carbohydrate; // (g/1회 제공량) 선택 public NutritionFacts(int servingSize, int servings, int calories, int fat, .. 2023. 2. 5.
아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라 정적 팩터리 메서드의 장점 1 보통 어떤 클래스의 인스턴스를 생성할 때 아래와 같이 public class Order { private boolean prime; private boolean urgent; private Product product; private OrderStatus orderStatus; public Order(Product product, boolean prime) { this.product = product; this.prime = prime; } } 생성자를 통해서 해당 인스턴스를 생성하게 됩니다. 하지만 만약에 생성자를 통해서 product, prime의 값이 아니라 product, urgent를 생성자의 매개변수로 하는 인스턴스도 만들고 싶을 때 생성자를 추가 하게 되면 pu.. 2023. 2. 5.
4. 좋은 단위 테스트의 4대 요소 4.1 좋은 단위 테스트의 4대 요소 자세히 살펴보기 회귀 방지 리팩터링 내성 빠른 피드백 유지 보수성4.1.1 첫 번째 요소: 회귀방지 회귀는 소프트웨어 버그다. 코드를 수정한 후 (일반적으로 새 기능을 출시한 후) 기능이 의도한 대로 작동하지 않는 경우다. 회귀 방지 지표에 대한 테스트 점수가 얼마나 잘 나오는지 평가하려면 다음 사항을 고려해야한다. 테스트 중에 실행되는 코드의양 코드 복잡도 코드의 도메인 유의성 최상의 보호를 위해서는 테스트가 해당 라이브러리, 프레임워크, 외부 시스템을 테스트 범주에 포함시켜서 소프트웨어가 이러한 의존성에 대해 검증이 올바른지 확인한다. 4.1.2 두 번째 요소: 리팩터링 내성 리팩터링 내성은 테스트를 '빨간색(실패)'으로 바꾸지 않고 기본 애플리케이.. 2023. 2. 5.
3. 단위 테스트 구조 3.1 단위 테스트를 구성하는 방법 AAA (Given - When - Then) 패턴 사용 준비 구절에서는 테스트 대상 시스템(SUT, System Under Test)과 해당 의존성을 원하는 상태로 만든다. 실행 구절에서는 SUT에서 메서드를 호출하고 준비된 의존성을 전달하며(출력이 있으면) 출력 값을 캡처한다. 검증 구절에서는 결과를 검증한다. 결과는 반환 값이나 SUT와 협력자의 최종 상태, SUT가 협력자에 호출한 메서드 등으로 표시될 수 있다.각 구절은 얼마나 커야 하는가? 준비 구절이 크다면 같은 테스트 클래스 내 비공개 메서드 또는 별도의 팩토리 클래스로 도출하는 것이 좋다. 실행 궂걸이 한 줄 이상인 경우를 경계하라검증 구절에는 검증문이 얼마나 있어야 하는가 검증 구절이 너무 커지는 것을.. 2023. 2. 5.