Spring강의 testcode

손원진·2023년 3월 22일
0

[SPRING]

목록 보기
9/15

TestCode와 DIP

public static void main(String[] args) {
  MemberServiceImpl memberService = new MemberServiceImpl();
  
        Member member = new Member(1L, "memberA", Grade.Vip);
        
        memberService.join(member);

        Member findMember =memberService.findMember(member.getId());

        System.out.println("findmember = " + findMember.getId()+ findMember.getGrade() + findMember.getName());

}

이전에 만들었던 코드를 사용하기위한 MemberApp 클래스를 생성, member 인스턴스 객체를 생성해 생성자로 id, name, grade를 넣어줘서 클래스변수에 값을 넣어주고,

memberService 인스턴스 객체 생성자에 member를 넣어 MemberRepository내 인스턴스 메소드에 member를 넘겨주고 클래스 변수 내 static hashMap()에 값이 저장되도록 진행했다.

그리고 인스턴스 memberService인스턴스 객체에 findMember 기능을 사용해서 member 객체를 hashMap에서 꺼내오기를 진행했다.

여기서 문제는 sout으로 눈으로 보기위해 계속해서 코드를 위와같이 찍어내야하는 점이다. 무엇이 필요한가? 자동으로 문제가 발생했을 때 에러를 알려주는 방식이 필요하다.

따라서, j-unit이라는 테스트 프레임워크를 사용할 것이다. - 대부분에 프레임워크엔 test framework 가 있음


public class MemberServiceTest {

   MemberService memberService = new MemberServiceImpl();
    @Test
    void join() {
        //given
        Member member = new Member(1L, "memberA", Grade.Vip);
        //when
        memberService.join(member);
        Member findMember = memberService.findMember(2L);

        //then
        Assertions.assertThat(member).isEqualTo(findMember);
		//설정한 member객체와 저장된 member객체를 가져온 인스턴스 객체랑 비교해서 확인 진행  
    }

}

위 코드는 DIP의존관계 역전-(추상화에 의존해야지 구체화에 의존해서는 안된다)의 원칙을 잘 지키고 있는가?

INTERFACE의 구현체가 추상화에도 의존하고 구현체에도 의존하면 안좋은 코드
-MemberServiceImpl이 memberRepository에도 의존하고 MemberRepositoryImpl();에도 의존함

OCP - 확장에는 열려있으나 개방에는 닫혀있다? 조금 더 공부해보자..아직 이해가 안간다,

위와 같이 사용하기위해선 @Test annotation을 붙여줘야한다.
given - 준비
when - 실행
then - 검증

3가지로 나누어서 진행한다.

given - test구문중 변수, 입력 값등을 정의하거나, mock객체를 정의하는 구문
when - 실제로 액션을하는 테스트를 실행하는 과정
then - 실제 실행을 검증하는 과정, 예상한 값 ,실제 실행을 통해 나온 값들을 검증

test 코드 정상 실행

초록 불이 뜸

test코드 error 경우

발생 예정 에러를 보여줌

profile
매일 한 걸음

0개의 댓글