Spring - 9

CYSSSSSSSSS·2024년 4월 15일
0

스프링

목록 보기
9/16

Spring

회원 서비스 테스트

Given - When - Then

  • 테스트 문법을 만들때 자주 사용하는 방식중 하나이다.
  • 주어진 데이터를 주어질때(given) 무언가를 시작 했을때(when) 결과가 어떻게 나와야 하는지(then)

회원가입 테스트

	MemberService memberService = new MemberService();

    @Test
    void join() {
        //given
        Member member = new Member();   // 회원가입할 새로운 멤버 객체
        member.setName("Spring");       // 멤버 이름 설정
        //when
        Long saveId = memberService.join(member);   // 새로 생긴 멤버가 member 서비스에 정상 가입절차를 걸치는지
        //then
        Member findMember = memberService.findOne(saveId).get();    //정상적으로 처리되면 saveID에 관련된 멤버 정보 객체 반환
        Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());    // 가입한 이름과 찾은 멤버의 정보가 일치하는 지 여부 확인
    }
  • memberService : 회원가입 로직 / 전체 회원 조회 / 아이디에 맞는 이름 리턴

회원가입 실패 테스트

    @Test
    void notJoin(){
        //given
        Member member1 = new Member();
        member1.setName("spring");

        Member member2 = new Member();
        member2.setName("spring");
        //when
        memberService.join(member1);

        //then
        IllegalStateException e = org.junit.jupiter.api.Assertions.assertThrows(IllegalStateException.class , ()->memberService.join(member2));
        Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");

    }
  • assertThrows는 특정 예외를 발생시키는지 확인하는 역할입니다.
  • 여기서는 두개의 멤버의 이름이 같기때문에 IllegalStateException이 발생해야 한다는것을 확인하고 싶은것 입니다.
  • 추가적으로 마지막에 발생한 예외처리의 표현을 assertThat 메서드로 확인하는 과정도 거치는것이다.

DI(Dependency Injection)

  • 의존성 주입은 객체간의 의존성을 외부에서 주입하는 것을 의미합니다. 의존성을 한 객체가 다른 객체를 사용하거나 의존하는 관계를 나타낸다.
  • DI는 객체간의 결합도를 줄이고 코드의 유연성과 재사용성을 향상시킬수 있다.
public class Car {
    private Engine engine;

    public Car(Engine engine) {
        this.engine = engine;
    }

    public void start() {
        engine.start();
        // 자동차가 시작될 때 엔진도 시작되도록 함
    }
}

public interface Engine {
    void start();
}

public class GasolineEngine implements Engine {
    @Override
    public void start() {
        // 가솔린 엔진을 시작하는 코드
    }
}

public class ElectricEngine implements Engine {
    @Override
    public void start() {
        // 전기 엔진을 시작하는 코드
    }
}
  • 자동차라는 클래스가 있다고 가정해 보자
  • 자동차에는 엔진이 존재하고 엔진을 어떻게 제작하는 것은 엔진쪽에서 관리해야하는 시스템 입니다.
  • 따라서 자동차는 엔진을 받아서 자동차에 사용하면 되는 구조가 DI의 핵심 아이디어 이다.
profile
개발자 되고 싶어요

0개의 댓글