Spring
회원 서비스 테스트
Given - When - Then
- 테스트 문법을 만들때 자주 사용하는 방식중 하나이다.
- 주어진 데이터를 주어질때(given) 무언가를 시작 했을때(when) 결과가 어떻게 나와야 하는지(then)
회원가입 테스트
MemberService memberService = new MemberService();
@Test
void join() {
Member member = new Member();
member.setName("Spring");
Long saveId = memberService.join(member);
Member findMember = memberService.findOne(saveId).get();
Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
}
- memberService : 회원가입 로직 / 전체 회원 조회 / 아이디에 맞는 이름 리턴
회원가입 실패 테스트
@Test
void notJoin(){
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
memberService.join(member1);
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의 핵심 아이디어 이다.