given - when - then(결과 확인) 형태로 코드를 구성한다.
assert는 테스트가 실패했을 시, 테스트 시의 기댓값과 실제값을 직접 보여주어 유용하다.
@AfterEach
public void afterEach() {
repository.clearStore();
}
@Test
public void save() {
//given
Member member = new Member();
member.setName("hi");
//when
repository.save(member);
//then
Member result = repository.findById(member.getId()).get();
assertThat(result).isEqualTo(member);
Assertions.assertEquals(member, result); // 위 코드와 기능이 동일하다.
IllegalException e = arrertThrows(IllegalException.class, ()-> memberService.join(member2));
// 뒷 함수에서 IllegalException 에러가 터질 것으로 기대된다 -> 터지면 테스트 성공
}
test 안에 package를 선택해서 test하면 package 안의 모든 파일에 대해 test를 실행한다.
모든 test는 순서 상관 없이 실행되므로, test 이후에 repository를 clear 할 수 있는 함수를 @afterEach 안에 생성하여 테스트에 사용한 모든 데이터를 지워줘야 한다.
그리고 @beforeEach에서 DI와 관련된 코드를 수행한다.
스프링 빈 : 스프링 컨테이너에 등록되어 스프링이 관리하는 객체
컴포넌트 스캔 : @Component 애노테이션이 있으면 자동으로 스프링 빈에 등록된다. @Service, @Controller 와 같은 애노테이션에는 @Component가 포함되어 있다.
이 때 Application 파일이 있는 폴더의 모든 하위 폴더에서만 컴포넌트 스캔이 진행된다.
의존관계 : 컨트롤러가 서비스를 통해서 비즈니스 로직을 수행한다. 이 때 컨트롤러가 서비스에 의존한다고 표현한다.
DI(의존성 주입) : 생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 연결 해준다.
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}