DataSource는 db 커넥션 획득할 때 사용하는 객체.
스프링 부트는 db 커넥션 정보 바탕으로 DataSource 생성하고 스프링 빈으로 만들어 둔다.
그래야 DI 받을 수 있음.
MemoryMemberRepository, JdbcMemberRepository는 구현체.
개방 폐쇄 원칙 (OCP, Open-Closed Principle)
확장에는 열려있고 수정, 변경에는 닫혀있음.
DI를 사용하면 기존 코드는 손대지 않고 설정만으로 구현 클래스 변경할 수 있음.
-> SpringConfig.java
@SpringBootTest
@Transactional // db에 테스트로 데이터 넣고 테스트 끝나면 다 롤백. 회원가입 테스트 다시해도 오류 x
class MemberServiceIntegrationTest {
// 테스트는 제일 끝단이므로 생성자 인젝션 안하고 편하게 필드 인젝션 해도 됨.
@Autowired MemberService memberService;
// 테스트 멤버 레파지토리는 서비스에서 쓰는 레파지토리와 다른 객체. (new로 새로 만듬)
// MemoryMemberRepository memberRepository = new MemoryMemberRepository(); // service만으론 클리어 못하므로 리파지토리 가져옴
@Autowired MemberRepository memberRepository;
@Test
void 회원가입() { // 테스트는 한글로 써도 됨
// given 뭔가 주어졌고
Member member = new Member();
member.setName("spring");
// when 이것을 실행 했을 때
Long saveId = memberService.join(member);
// then 결과
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName()); // alt+enter static import
}
}