Study/Spring

[스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해1 - 예제 만들기(주문과 할인 도메인 실행과 테스트)

black6765 2022. 12. 6. 20:50

OrderApp

package hello.core;

import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.order.Order;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;

public class OrderApp {

    public static void main(String[] args) {
        MemberService memberService = new MemberServiceImpl();
        OrderService orderService = new OrderServiceImpl();

        Long memberId = 1L;
        Member member = new Member(memberId, "memberA", Grade.VIP);
        memberService.join(member);

        Order order = orderService.createOrder(memberId, "itemA", 10000);

        System.out.println("order = " + order.toString());
    }
}
  • main을 이용하여 테스트

OrderServiceTest

package hello.core.order;

import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

public class OrderServiceTest {

    MemberService memberService = new MemberServiceImpl();
    OrderService orderService = new OrderServiceImpl();

    @Test
    void createOrder() {
        // primitive type인 long으로 해도 되지만, 그러면 null이 들어갈 수 없음
        Long memberId = 1L;
        Member member = new Member(memberId, "memberA", Grade.VIP);
        memberService.join(member);

        Order order = orderService.createOrder(memberId, "itemA", 10000);
        // org.assertj.core.api를 사용해야 .을 이용한 메소드 체인을 사용 가능
        Assertions.assertThat(order.getDiscountPrice()).isEqualTo(1000);
    }
}

전체 테스트

  • test.java.hello.core에서 Run test
  • 전체 테스트가 실행 됨
  • CoreApplicationTest처럼 @SpringBootTest 어노테이션이 붙어있으면 스프링을 띄우기 떄문에 오래 걸림
  • 단위 테스트를 잘 짜는 것이 중요
    • 단위 테스트 수 천개가 있어도 몇 초만에 끝남
    • 여기서 단위 테스트는 스프링이나 컨테이너의 도움 없이 순수하게 자바 코드로 테스트 하는 것

 

※ 본 게시글은 인프런의 스프링 핵심 원리 - 기본편(김영한)을 수강하고 정리한 내용입니다.