회원 관리 예제

inho ha·2022년 2월 10일
0

웹 어플리케이션 계층 구조

컨트롤러 : 웹 MVC, API 를 컨트롤하는 역할
서비스 : 비즈니스 로직 구현
리포지토리 : 데이터베이스에 접근, 도메인 객체를 db에 저장하고 관리
도메인 : 비즈니스 도메인 객체

Optional : 자바8에 들어가 있는 기능, Null이 리턴 될 가능성이 있을때 Optional.ofNullable() 로 감싸주면 클라이언트에서 뭘 할 수가 있음

테스트 케이스 작성

main, controller 를 통행 기능을 테스트 하면 오래 걸리고 한번에 수행하기 어렵다
junit 을 사용하면 이를 해결할 수 있다

테스트 클래스의 이름은 관례상 테스트 하려는 클래스 이름 뒤에 Test를 붙인다

@Test : 메서드에 어노테이션을 붙이면 메소드 실행이 가능해진다.

optional 로 리턴된 것은 .get() 으로 가져올 수 있다.

    assertThat(기대값).isEqualTo(실제값);

테스트는 테스트 순서가 보장이 안된다
모든 테스트는 순서와 관계없이 동작 해야한다
이전에 진행된 테스트에서 저장된 데이터가 이번의 테스트에 영향을 미치지 않도록 각 테스트가 끝날때 마다 데이터를 비워줘야한다.

@AfterEach : 이 어노테이션을 이용한 메서드는 테스트 메서드가 하나 끝날때 마다 실행이 된다. 여기에 데이터를 비워주는 코드를 작성하면 이전의 테스트가 끝난뒤 데이터를 비워주어 다음 테스트에 영향을 미치지 않게 할 수 있다.

TDD : 테스트 기반 개발, 테스트 코드를 먼저 작성하고 테스트 코드가 성공하는 구현 클래스를 작성하는 개발 방식

테스트 코드는 메서드 명을 과감하게 한글로 작성해도 됨

given, when, then

given : 이런 상황이 주어졌을때
when : 이걸 실행 했을때
then : 이게 나와야 함
테스트 코드 작성시 세가지 주석을 작성하고 나눠서 작성하면 도움이 됨

실제 코드와 테스트 코드에서 같은 레포지토리를 각각 new 로 생성하여 사용시 문제

static으로 처리하지 않은 멤버변수는 서로 다른 레포지토리에서 수정이 가능할 수가 있음
같은 레포지토리로 사용할 수 있도록 DI

Dependency Injection

다음시간에 자세히

예외 처리 잘되는지 테스트 방법

  1. try catch
	try{
            memberService.join(member2);
            fail();
        } catch (IllegalStateException e) {
            Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
        }
  1. assertThrows
        assertThrows(IllegalStateException.class, () -> memberService.join(member2));

서비스 개발

result.ifPresent(m -> {
            throw new IllegalStateException("이미 존재하는 회원입니다.");
        });

result가 null이 아니고 존재하면 실행되는 코드

IntelliJ 단축키

shift + f6 : 테스트 할때 이름이 다른 객체 두개 생성시 하나만 코드 작성하고 복붙하고 shift + f6 누르면 rename 가능
cmd + option + v : 메서드 사용하고 단축키 사용시 객체에 리턴 받아주는 코드로 작성해줌
ctrl + 7 : 리펙토링 과 관련된 옵션들이 나옴, extract method를 고르면 코드를 메서드로 뺄 수 있음
cmd + shift + t : 클래스에 커서를 두고 단축키 사용시 테스트 코드 생성 가능
ctrl + r : 최근에 실행시킨거 다시 실행 시킴

profile
inho ha / ian(swatchon) / iha(42seoul)

0개의 댓글