컨트롤러 : 웹 MVC, API 를 컨트롤하는 역할
서비스 : 비즈니스 로직 구현
리포지토리 : 데이터베이스에 접근, 도메인 객체를 db에 저장하고 관리
도메인 : 비즈니스 도메인 객체
Optional : 자바8에 들어가 있는 기능, Null이 리턴 될 가능성이 있을때 Optional.ofNullable() 로 감싸주면 클라이언트에서 뭘 할 수가 있음
main, controller 를 통행 기능을 테스트 하면 오래 걸리고 한번에 수행하기 어렵다
junit 을 사용하면 이를 해결할 수 있다
테스트 클래스의 이름은 관례상 테스트 하려는 클래스 이름 뒤에 Test를 붙인다
@Test : 메서드에 어노테이션을 붙이면 메소드 실행이 가능해진다.
optional 로 리턴된 것은 .get() 으로 가져올 수 있다.
assertThat(기대값).isEqualTo(실제값);
테스트는 테스트 순서가 보장이 안된다
모든 테스트는 순서와 관계없이 동작 해야한다
이전에 진행된 테스트에서 저장된 데이터가 이번의 테스트에 영향을 미치지 않도록 각 테스트가 끝날때 마다 데이터를 비워줘야한다.
@AfterEach : 이 어노테이션을 이용한 메서드는 테스트 메서드가 하나 끝날때 마다 실행이 된다. 여기에 데이터를 비워주는 코드를 작성하면 이전의 테스트가 끝난뒤 데이터를 비워주어 다음 테스트에 영향을 미치지 않게 할 수 있다.
TDD : 테스트 기반 개발, 테스트 코드를 먼저 작성하고 테스트 코드가 성공하는 구현 클래스를 작성하는 개발 방식
테스트 코드는 메서드 명을 과감하게 한글로 작성해도 됨
given : 이런 상황이 주어졌을때
when : 이걸 실행 했을때
then : 이게 나와야 함
테스트 코드 작성시 세가지 주석을 작성하고 나눠서 작성하면 도움이 됨
static으로 처리하지 않은 멤버변수는 서로 다른 레포지토리에서 수정이 가능할 수가 있음
같은 레포지토리로 사용할 수 있도록 DI
다음시간에 자세히
try{
memberService.join(member2);
fail();
} catch (IllegalStateException e) {
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
assertThrows(IllegalStateException.class, () -> memberService.join(member2));
result.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
result가 null이 아니고 존재하면 실행되는 코드
shift + f6 : 테스트 할때 이름이 다른 객체 두개 생성시 하나만 코드 작성하고 복붙하고 shift + f6 누르면 rename 가능
cmd + option + v : 메서드 사용하고 단축키 사용시 객체에 리턴 받아주는 코드로 작성해줌
ctrl + 7 : 리펙토링 과 관련된 옵션들이 나옴, extract method를 고르면 코드를 메서드로 뺄 수 있음
cmd + shift + t : 클래스에 커서를 두고 단축키 사용시 테스트 코드 생성 가능
ctrl + r : 최근에 실행시킨거 다시 실행 시킴