diff --git a/application-test/app-test/src/main/java/com/example/apptest/member/MemberService.java b/application-test/app-test/src/main/java/com/example/apptest/member/MemberService.java index 5ab57aa0..43ad6369 100644 --- a/application-test/app-test/src/main/java/com/example/apptest/member/MemberService.java +++ b/application-test/app-test/src/main/java/com/example/apptest/member/MemberService.java @@ -1,10 +1,17 @@ package com.example.apptest.member; import com.example.apptest.domain.Member; +import com.example.apptest.domain.Study; import java.util.Optional; public interface MemberService { Optional findById(Long memberId); + + void validate(Long memberId); + + void notify(Study newStudy); + + void notify(Member member); } diff --git a/application-test/app-test/src/main/java/com/example/apptest/study/StudyService.java b/application-test/app-test/src/main/java/com/example/apptest/study/StudyService.java index b4face39..dcc95b3a 100644 --- a/application-test/app-test/src/main/java/com/example/apptest/study/StudyService.java +++ b/application-test/app-test/src/main/java/com/example/apptest/study/StudyService.java @@ -17,7 +17,7 @@ public class StudyService { } public Study createNewStudy(Long memberId, Study study) { - Member member = memberService.findById(memberId) + memberService.findById(memberId) .orElseThrow(() -> new IllegalArgumentException("Member doesn't exist for id: " + memberId)); study.setOwnerId(memberId); return studyRepository.save(study); diff --git a/application-test/app-test/src/test/java/com/example/apptest/study/StudyServiceTest.java b/application-test/app-test/src/test/java/com/example/apptest/study/StudyServiceTest.java index f93e7b30..d0b1107b 100644 --- a/application-test/app-test/src/test/java/com/example/apptest/study/StudyServiceTest.java +++ b/application-test/app-test/src/test/java/com/example/apptest/study/StudyServiceTest.java @@ -1,5 +1,7 @@ package com.example.apptest.study; +import com.example.apptest.domain.Member; +import com.example.apptest.domain.Study; import com.example.apptest.member.MemberService; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -8,11 +10,123 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; +import java.util.Optional; + import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; @ExtendWith(MockitoExtension.class) class StudyServiceTest { + @Test + @DisplayName("stubbing test") + void test_45(@Mock MemberService memberService, + @Mock StudyRepository studyRepository) { + + StudyService studyService = new StudyService(memberService, studyRepository); + assertNotNull(studyService); + + Study study = new Study(10, "테스트"); + Member member = new Member(); + member.setId(1L); + member.setEmail("email@email.com"); + + Mockito.when(memberService.findById(1L)) + .thenReturn(Optional.of(member)); + Mockito.when(studyRepository.save(study)).thenReturn(study); + + studyService.createNewStudy(1L, study); + + assertNotNull(study.getOwnerId()); + assertEquals(member.getId(), study.getOwnerId()); + + System.out.println("테스트 완료!!"); + } + + @Test + @DisplayName("Stubbing test") + void test_44(@Mock MemberService memberService, + @Mock StudyRepository studyRepository) { + + StudyService studyService = new StudyService(memberService, studyRepository); + assertNotNull(studyService); + + // 리턴할 객체 생성 + Member member = new Member(); + member.setId(1L); + member.setEmail("email@email.com"); + + // 첫번째 호출 Optional.of(member) 리턴 + // 두번째 호출 new RuntimeException() 리턴 + // 세번째 호출 이후 Optional.empty() 리턴 + Mockito.when(memberService.findById(any())) + .thenReturn(Optional.of(member)) + .thenThrow(new RuntimeException()) + .thenReturn(Optional.empty()); + + // 첫번째 호출 + Optional findMember = memberService.findById(1L); + assertEquals("email@email.com", findMember.get().getEmail()); + + // 두번째 호출 + assertThrows(RuntimeException.class, () -> memberService.findById(1L)); + + // 세번째 호출 + assertEquals(Optional.empty(), memberService.findById(1L)); + + // 네번째 호출 + assertEquals(Optional.empty(), memberService.findById(1L)); + + System.out.println("테스트 완료!"); + } + + @Test + @DisplayName("Stubbing test") + void test_43(@Mock MemberService memberService, + @Mock StudyRepository studyRepository) { + + StudyService studyService = new StudyService(memberService, studyRepository); + assertNotNull(studyService); + + // 리턴할 객체 생성 + Member member = new Member(); + member.setId(1L); + member.setEmail("email@email.com"); + + // 예외 테스트 -> memberService.validate(1L) 이 호출되면 IllegalArgumentException 발생 + Mockito.doThrow(new IllegalArgumentException()).when(memberService).validate(1L); + + // 예외 체크 + assertThrows(IllegalArgumentException.class, () -> memberService.validate(1L)); + + memberService.validate(2L); + + System.out.println("테스트 완료!"); + } + + @Test + @DisplayName("Stubbing test") + void test_42(@Mock MemberService memberService, + @Mock StudyRepository studyRepository) { + + StudyService studyService = new StudyService(memberService, studyRepository); + assertNotNull(studyService); + + // 리턴할 객체 생성 + Member member = new Member(); + member.setId(1L); + member.setEmail("email@email.com"); + + // when( 실행할 구문 ) thenReturn( 리턴 값 ) + // memberService.findById( 아무값 ) 이 호출되면 Optional.of(member) 리턴 + Mockito.when(memberService.findById(any())).thenReturn(Optional.of(member)); + + assertEquals("email@email.com", memberService.findById(1L).get().getEmail()); + assertEquals("email@email.com", memberService.findById(2L).get().getEmail()); + + System.out.println("테스트 완료!"); + } + @Test @DisplayName("@Mock test") void test_41(@Mock MemberService memberService,