서비스 : 핵심 비즈니스 로직 구현
리포지토리 : 데이터베이스에 접근
도메인 : 비즈니스 도메인 객체
단축키 :
작성한 코드를 별도의 메서드로 만드려면 단축키는? (메서드 추출) : Ctrl + Alt + m
테스트 파일을 쉽게 만드는 단축키는 ? : Ctrl + shift + t
게터,세터,생성자 단축키는? : alt + insert
반환형 만든는 단축키는? : ctrl + alt + v
rename을 쉽게 도와주는 단축키는? shift + f6
1 . 회원 리포지토리 테스트 케이스 작성
테스트 케이스 작성 중 Assertions.assertThat에서 에러가 발생하였다.
질문 게시판에서 이유를 발견할 수 있었다.
Assertion에는 import할 수 있는 2가지가 있다.
강사님께서는 assertj.core.api.Asserions; 를 import하였고 나는 다른 Assertions를 import하여 에러가 발생한 것이었다.
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("spring2");
repository.save(member2);
Member result = repository.findByName("spring1").get();
Assertions.assertThat(result).isEqualTo(member1);
}
이런 식으로 @Test 어노테이션을 이용해 코드를 테스트 할 수 있다.
지금까지 개발할 때는 postman을 이용하였는데 이렇게 하면 훨씬 빠르고 쉽게 할 수 있을것같다.
테스트는 순서를 보장하지 않고 랜덤으로 실행이 된다. (의존관계 없이 설계가 되어야한다.)
그래서 실행되는 순서에 따라 데이터가 남아있어 문제를 발생시킬 수 있다.
이를 방지하기 위해 test가 끝날 때마다 data를 clear해주어야한다.
@AfterEach
public void afterEach(){
repository.clearStore();
}
를 작성하면 된다.
이러한 테스트 코드를 먼저 만드는 것이 TDD 테스트 주도 개발이라고 한다.
2 . 회원 서비스 테스트
service에서 이용하는 리포지토리와 테스트에서 사용하는 리포지토리가 서로 다르다.
같은 인스턴스를 사용하도록 변경해야한다.
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
MemberService memberService;
MemoryMemberRepository memoryMemberRepository;
@BeforeEach
public void beforeEach(){
memoryMemberRepository = new MemoryMemberRepository();
memberService = new MemberService(memoryMemberRepository);
}
이렇게 memberService입장에서 직접 리포지토리를 만드는 것이 아니라 외부에서 넣어준다.
이를 DI(Dependency Injection)라고 한다.
'개발공부 > [spring]김영한_스프링입문' 카테고리의 다른 글
스프링 컨테이너와 스프링 빈_(feat.BeanDefinition) (0) | 2022.08.04 |
---|---|
DI(의존관계 주입)와 DI 컨테이너 (0) | 2022.08.04 |
좋은 객체 지향 설계의 원칙(SOLID) (0) | 2022.08.04 |
[2]스프링 빈과 의존관계 _ 컴포넌트 스캔, 자바코드로 직접 등록 (0) | 2022.07.20 |
[0]프로젝트 환경설정과 스프링 웹 개발 기초 (0) | 2022.07.13 |