https://martinfowler.com/articles/mocksArentStubs.html Mocks Aren't Stubs Explaining the difference between Mock Objects and Stubs (together with other forms of Test Double). Also the difference between classical and mockist styles of unit testing. martinfowler.com Dummy 아무 것도 하지 않는 깡통 객체 Fake 단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 부족한 객체(ex. FakeRepository) Stub 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체 그 ..
Spring관련 기술
요구사항 추가 관리자가 특정일자를 입력하면, 그 날짜에 해당하는 하루치 매출 통계를 메일로 전송해주는 서비스 예) 2023.12.24일 입력하면 2023.12.24일 00:00:00 ~ 12:59:59 이하에 해당하는 매출 통계를 메일로 전송한다. 구현코드 https://github.com/beginner0107/cafekiosk/commit/8f16e2f387560124257c24c5e92caf2be2d3002c Mockito로 Stubbing하기 - 예제) Mail 전송 기능 테스트 하는 법 · beginner0107/cafekiosk@8f16e2f beginner0107 committed Dec 24, 2023 github.com @RequiredArgsConstructor @Service publ..
Controller 단위 테스트를 진행 @PostMapping("/api/v1/orders/new") public ApiResponse createOrder(@Valid @RequestBody OrderCreateRequest request) { LocalDateTime registeredDateTime = LocalDateTime.now(); return ApiResponse.ok(orderService.createOrder(request.toServiceRequest(), registeredDateTime)); } /* builder, allArgs, noArgs */ @Getter public class OrderCreateRequest { @NotEmpty(message = "상품 번호 리스트는 ..
Presentation Layer 외부 세계의 요청을 가장 먼저 받는 계층 파라미터에 대한 최소한의 검증을 수행한다. Mock 가짜 MockMvc Mock(가짜) 객체를 사용해 스프링 MVC 동작을 재현할 수 있는 테스트 프레임워크 요구사항 추가 관리자 페이지에서 신규 상품을 등록할 수 있다. 상품명, 상품타입, 판매 상태, 가격 등을 입력받는다. // productNumber // 001 002 003 004 // DB 에서 마지막 저장된 Product의 상품 번호를 읽어와서 +1 // 009 -> 010 구현코드 https://github.com/beginner0107/cafekiosk/commit/4e32f9b28d8b430fc82501c6c6bf96d65216df92 Presentation Lay..
요구사항 추가 주문 생성 시 재고 확인 및 개수 차감 후 생성하기 재고는 상품번호를 가진다. 재고와 관련 있는 상품 타입은 병 음료, 베이커리이다. 구현코드 https://github.com/beginner0107/cafekiosk/commit/b905364759754c114e9ac8923ba3d6505b7bc79b Business Layer 테스트(3) GREEN · beginner0107/cafekiosk@b905364 beginner0107 committed Dec 17, 2023 github.com https://github.com/beginner0107/cafekiosk/commit/df44d4f82dab4b459d78d63e768e236870690bf1 Business Layer 테스트(3) ..
고아객체 고아 객체 제거: 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제 orphanRemoval = true Parent parent1 = em.find(Parent.class, id); parent1.getChildren().remove(0); // 자식 엔티티를 컬렉션에서 제거 DELETE FROM CHILD WHERE ID=? 쓸일이 있을까? 참조가 제거된 엔티티는 다른 곳에서 참조하지 않는 고아 객체로 보고 삭제하는 기능 참조하는 곳이 하나일 때 사용해야함! 특정 엔티티가 개인 소유할 때 사용 @OneToOne, @OneToMany만 가능 참고: 개념적으로 부모를 제거하면 자식은 고아가 된다. 따라서 고아 객체 제거 기능을 활성화하면, 부모를 제거할 때 자식도 함께 제거된다. 이것..