JUnit 프레임워크를 사용하지 않고 테스트 코드를 작성하자.
프로젝트 폴더 안에 MemberApp 클래스를 생성한다.
이 클래스에서 직접 main 메소드로 코드를 실행할 예정이다.
package Goat.core;
import Goat.core.member.Grade;
import Goat.core.member.Member;
import Goat.core.member.MemberService;
import Goat.core.member.MemberServiceImpl;
public class MemberApp {
public static void main(String[] args) {
MemberService memberService = new MemberServiceImpl();
Member member = new Member(1L,"GOAT", Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
System.out.println("findMember = " +findMember.getName());
System.out.println("member = " + member.getName());
}
}
< 결과 >
package Goat.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,"Goat1",Grade.VIP);
//when
memberService.join(member);
Member findMember = memberService.findMember(1L);
//then
Assertions.assertThat(member).isEqualTo(findMember);
}
}
분명, 구현체에 의존하지 않고, 추상화 (Interface)에 의존하는 것이 이상적이라고 했다. 하지만
MemberService memberService = new MemberServiceImpl();
여기 부분에서, MemberService까지는 괜찮았지만, 결국 MemberServiceImpl이라는 구현체에 의존한 코드가 되었다.
결국 둘다 의존하는 중이다. -> DIP 위반