12会員サービステスト
MemberService.JAvaのmemberRepositoryとMemberServiceTest.JAvaとmemberRepositoryの異なるリポジトリ:異なるインスタンス(現在、静的キーワードはMapstoreの前にあり、同じデバイスとして使用されていますが、staticがない場合、異なるデバイスを生成する際に問題が発生します)
ソリューション
外部から挿入するように設計:メモリ・サービスから直接オブジェクトを新規作成しません
同じメモリを使用
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
オブジェクトを作成せずにmemberRepositoryを直接新規作成し、外部から入れるものを依存注入と呼びます.@BeforeEach
public void berforeEach() {//테스트가 실행할 때마다 생성
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@Test
void 회원가입() {//join
//given 뭔가 주어졌을 때: 데이터
Member member = new Member();
member.setName("hello");
//when 이게 실행됐을 때: 검증부분
Long saveId = memberService.join(member);
//then 결과가 이렇게 되어야 한다: 검증확인
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
@Test
public void 중복_회원_예외(){
//given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
//when
memberService.join(member1);
//방법1
try {
memberService.join(member2);//같은 이름으로 등록이 되면 fail
fail();
} catch (IllegalStateException e) {
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
//방법2
assertThrows(IllegalStateException.class, () -> memberService.join(member2));//member2를 넣으면 앞에 예외가 터져야함: 성공
//방법3
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
//then
}
春入門12(金英漢)Reference
この問題について(12会員サービステスト), 我々は、より多くの情報をここで見つけました https://velog.io/@yh_lee/12-회원-서비스-테스트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol