life is egg

[입문] 회원 관리 예제 -백엔드 개발 본문

개인공부/김젊음님

[입문] 회원 관리 예제 -백엔드 개발

삶은계란진재혁 2022. 12. 28. 00:28

강의노트임

 

비즈니스 요구사항 정리

더보기

개발시 첫번재로 해야할것..

요구사항 정리


회원 도메인과 리포지토리 만들기

더보기

Optional은 null이 나올경우를 대비해 Optional로 감싸서 보내는 느낌!


Optional.ofNullable(store.get(id));

옵셔널로 감싸서 보내주면 앞단에서 어떻게 해결 할 수 있나봐 ~

 

 Stream ~ findAny ... 하나라도 찾았으면 그거 반환해라 ..!

store.values().stream()
.filter(member ->member.getName()
.equals(name))
.findAny();

 


회원 리포지토리 테스트  케이스 작성

더보기

테스트 jUnit 활용

객체 생성하고?

.. 내가 작성한 메소드 있는것처럼 가져다가 쓰면됨...

@Test

밑줄로 바로 내려가기 단축기 컨트롤 쉬프트 엔터

옵셔널로 감싼거 꺼낼때는 get매소드 쓰면 꺼낼수 있는데 보통 Test케이스에서는 바로 꺼네서도 됨..! 실제로는 X


@Test
public  void save(){
    Member member = new Member();
    member.setName("String");

    repository.save(member);

    Member result = repository.findById(member.getId()).get();

    Assertions.assertEquals(기댓값,저장된값);

}

요즘에는 org.assertj.core.api에 들어있는 Assertions를 많이 이용한다

Assertions.assertThat(member).isEqualTo(result);

Assertions는 static import 가능하다 알트+엔터로 접근

그러면 다음부터는 assertThat으로 시작가능

@Test
public  void save(){
    Member member = new Member();
    member.setName("String");

    repository.save(member);

    Member result = repository.findById(member.getId()).get();

   /* Assertions.assertEquals(member,result);*/

    assertThat(member).isEqualTo(result);


}

꿀팁 단축키 쉬프트+F6 쓰면 동시 rename!...


동시에 테스트를 진행하면 오류가 발생한다 이유는?

이유는 바로... 이미 findAll에서 동일한 이름으로 두개를 넣어놔서 그럼.. 즉.. 테스트를 끝날때마다 레포지토리를 비워주는게 필요함..! 테스트끼리는 순서와 상관없이 의존관계가 없어야함

@AtferEach 사용 무슨 동작 끝날때마다 ~동작실행

 


지금은 클래스를 만들고 테스트했자나

TDD는 테스트먼저하고 클래스를 만드는거야 ~!


회원 서비스 개발

더보기

컨트롤 알트 v 해주면 알아서 앞에 자료형 + 이름을 정해줌..!?


옵셔널의 장점임.. if 머시기 비교안해도됨 ..!


어.. ! 강사님 IllegalStateException이다 .. 주의하자 !!


로직은.. 메소드로 해주는게 좋아

윈도우 컨트롤 쉬프트 알트 t?

누르면 리펙토링관련된게 나오는데 거기서 method찾아서 쓰세..ㅁ!

Extract Method


 

회원 서비스 테스트

더보기

테스트 직접만들기보단 커맨드 이용해보자 ..!

클래스에서 ~컨트롤 쉬프트 T !

테스트코드는 한글로 메소드 작성많이해 ~

직관적인게 중요하자나~;

Test코드 작성 요령

Given -when - then 주석달기


테스트는 예외경우가 정상경우보다 .. 더중요해! !! ! !

 예외 터지는경우 잡기는 ..

1 .try catch

2.assertThrows()

2-1 메세지 검증은.. 컨트롤 알트 v해서 만들어서 받아서 검증..!


문제가있다

clearStore 메소드를 사용할려고 멤버 리파지토리를 .객체를 생성했는데 이객체는 .. 멤버서비스 안에 생성한 리파지토리 객체랑 다른 레포지토리..!

지금 상황 문제가 없었던것은 ... 멤버 저장하는 store Map이 static 선언이 되어있기때문..

 해결방법은

멤버서비스에서 new이용해서 새로운 객체 생성이 아닌 멤버 서비스의 생성자를 레포로 주입방식으로 하면 같은 인스턴스를 쓰게 할 수 있다 .

이것이 ..DI방식이다..

 

바뀐 테스트코드 ...

DI방식으로 바뀐 멤버 서비스.

Comments