2.5.1 회원 도메인 테스트 - main 메소드 사용
앞선 섹션 2.4에서 작성한 회원 도메인이 정상적으로 작동하는지 테스트 해보자.
먼저, main > java > hello.core 에 order 패키지를 생성하고,
MemberApp 클래스를 다음과 같이 작성한다.
package hello.core;
import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
public class MemberApp {
public static void main(String[] args) {
MemberService memberService = new MemberServiceImpl();
Member member = new Member(1L, "memberA", Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
System.out.println("new member = " + member.getName());
System.out.println("find member = " + findMember.getName());
}
}
public static void main(String[] args)
: pvsm 을 작성하면 자동으로 main 메소드가 작성된다.
Member member = new Member(1L, "memberA", Grade.VIP)
: 회원 아이디가 1, 이름이 memberA , 등급이 VIP 인 회원 객체를 생성한다.
memberService.join(member)
: 생성한 회원 객체를 회원가입하도록 한다.
Member findMember = memberService.findMember(1L)
: 회원 아이디를 이용하여 찾은 회원 객체를 반환한다.
메인 메소드를 실행해보면, 다음과 같이 회원가입된 객체와 메모리에서 찾은 객체가 같은 것을 확인해 볼 수 있다.
하지만, 애플리케이션 로직으로 테스트 하는 것은 좋은 방법이 아니다.
따라서, 아래의 JUnit 테스트 방법을 사용하는것이 더 좋다.
2.5.2 회원 도메인 테스트 - JUnit 사용
JUnit 테스트 프레임을 사용하여 회원 도메인 코드를 test 해보자.
먼저, test > java > hello.core 에 member 패키지를 생성하고,
MemberServiceTest 클래스를 다음과 같이 작성한다.
(test 패키지 아래에 작성된 파일은 빌드할 때, 배포되지 않는다.)
package hello.core.member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
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(1L);
//then
Assertions.assertThat(member).isEqualTo(findMember);
}
}
@Test
: 테스트 코드의 경우 test annotaion 사용한다.
Member member = new Member(1L, "memberA", Grade.VIP)
: 회원 아이디가 1, 이름이 memberA , 등급이 VIP 인 회원 객체를 생성한다.
memberService.join(member)
: 앞서 생성한 객체를 저장소에 저장한다.
Member findMember = memberService.findMember(1L)
: id 가 1인 회원 객체를 저장소에서 찾아 반환한다.
Assertions.assertThat(member).isEqualTo(findMember)
: assertions api 를 사용하여 간편하게 저장한 회원 객체와 찾은 회원 객체가 같은지 확인한다.
테스트를 실행해보면 다음과 같이 정상적으로 동작하는 것을 확인할 수 있다.
2.5.3 회원 도메인 설계상 문제점
앞서 작성한 회원 도메인 설계상 문제점은 다음과 같다.
1) 다은 저장소로 변경할 때 OCP 원칙이 지켜지는가?
2) DIP 원칙은 지켜지고 있는가?
다음의 코드를 살펴보자.
MemberService memberService = new MemberServiceImpl();
memberService 는 MemberService 인터페이스 뿐만 아니라
MemberServiceImpl 구현체까지 모두 의존하고 있는 것을 볼 수 있다.
이렇듯, 인터페이스(추상화) 와 구현체(구체화) 에 모두 의존할 경우,
DIP 를 위반하여 나중에 변경사항이 있을 시 문제가 될 수 있다.
따라서, 이를 해결하기 위한 추가적인 코드가 필요할 것으로 보인다.
김영한 '스프링 핵심 원리 - 기본편' 강의를 기반으로 작성하였습니다.
'SPRING 핵심 원리 [ 기본편 ]' 카테고리의 다른 글
[스프링 핵심 원리] 섹션 2.7 예제만들기 (주문과 할인 도메인 개발) (0) | 2023.01.24 |
---|---|
[스프링 핵심 원리] 섹션 2.6 예제만들기 (주문과 할인 도메인 설계) (0) | 2023.01.24 |
[스프링 핵심 원리] 섹션 2.4 예제만들기 (회원 도메인 개발) (0) | 2023.01.24 |
[스프링 핵심 원리] 섹션 2.3 예제만들기 (회원 도메인 설계) (0) | 2023.01.24 |
[스프링 핵심 원리] 섹션 2.2 예제만들기 (비즈니스 요구사항과 설계) (0) | 2023.01.24 |