POJO로 된 서비스를 스프링빈으로 등록하여 스프링부트 테스트로 변경하기
스프링부트 테스트로 전환하기 위해 아래와 같이 각 클래스 파일에 어노테이션을 추가해준다.
ProductService.java
package com.example.productorderservice.product;
import org.springframework.stereotype.Component;
@Component // 추가
class ProductService {
private final ProductPort productPort;
ProductService(final ProductPort productPort) {
this.productPort = productPort;
}
public void addProduct(final AddProductRequest request) {
final Product product = new Product(request.name(), request.price(), request.discountPolicy());
productPort.save(product);
}
}
ProductAdapter.java
package com.example.productorderservice.product;
import org.springframework.stereotype.Component;
@Component // 추가
class ProductAdapter implements ProductPort {
private final ProductRepository productRepository;
ProductAdapter(final ProductRepository productRepository) {
this.productRepository = productRepository;
}
@Override
public void save(final Product product) {
productRepository.save(product);
}
}
ProductRepository.java
package com.example.productorderservice.product;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.Map;
@Repository//추가
class ProductRepository {
private Long sequence = 0L;
private Map<Long, Product> persistence = new HashMap<>();
public void save(final Product product) {
product.assignId(++sequence);
persistence.put(product.getId(), product);
}
}
ProductServiceTest.java
package com.example.productorderservice.product;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest // 추가
class ProductServiceTest {
@Autowired // 추가
private ProductService productService;
@Test
void 상품등록() {
final AddProductRequest request = 상품등록요청_생성();
productService.addProduct(request);
}
private static AddProductRequest 상품등록요청_생성() {
final String name ="상품명";
final int price = 1000;
final DiscountPolicy discountPolicy = DiscountPolicy.NONE;
return new AddProductRequest(name, price, discountPolicy);
}
}
실행결과
'Backend > TDD' 카테고리의 다른 글
[TDD] JPA 적용하기 (0) | 2023.02.16 |
---|---|
[TDD] API 테스트로 전환하기 (0) | 2023.02.15 |
[TDD] POJO 상품 등록 기능 구현하기 (0) | 2023.02.14 |
[TDD] TDD 구현 실습 - 프로젝트 소개 및 생성 (0) | 2023.02.14 |
TDD(Test-Driven-Development) 방법론 (0) | 2023.02.14 |