1
1
package com .wypl .wyplcore .member .service ;
2
2
3
3
import static org .assertj .core .api .Assertions .*;
4
+ import static org .mockito .ArgumentCaptor .*;
4
5
import static org .mockito .ArgumentMatchers .*;
5
6
import static org .mockito .BDDMockito .*;
6
7
14
15
import org .junit .jupiter .api .extension .ExtendWith ;
15
16
import org .junit .jupiter .params .ParameterizedTest ;
16
17
import org .junit .jupiter .params .provider .EnumSource ;
18
+ import org .mockito .ArgumentCaptor ;
17
19
import org .mockito .InjectMocks ;
18
20
import org .mockito .Mock ;
19
21
import org .mockito .junit .jupiter .MockitoExtension ;
22
+ import org .springframework .context .ApplicationEventPublisher ;
23
+ import org .springframework .test .context .event .RecordApplicationEvents ;
20
24
21
25
import com .wypl .googleoauthclient .GoogleOAuthClient ;
22
26
import com .wypl .googleoauthclient .data .response .GoogleUserInfoResponse ;
26
30
import com .wypl .jpamemberdomain .member .domain .SocialMember ;
27
31
import com .wypl .jpamemberdomain .member .repository .MemberRepository ;
28
32
import com .wypl .jpamemberdomain .member .repository .SocialMemberRepository ;
33
+ import com .wypl .wyplcore .member .data .MemberEventDto ;
29
34
import com .wypl .wyplcore .member .fixture .MemberFixture ;
30
35
36
+ @ RecordApplicationEvents
31
37
@ ExtendWith (MockitoExtension .class )
32
38
public class MemberServiceTest {
33
39
@ InjectMocks
@@ -38,6 +44,8 @@ public class MemberServiceTest {
38
44
private GoogleOAuthClient googleOAuthClient ;
39
45
@ Mock
40
46
private SocialMemberRepository socialMemberRepository ;
47
+ @ Mock
48
+ private ApplicationEventPublisher applicationEventPublisher ;
41
49
42
50
@ DisplayName ("Member를 정상적으로 삭제한다." )
43
51
@ Test
@@ -53,6 +61,14 @@ void quitMemberTest() {
53
61
54
62
// Then
55
63
verify (memberRepository ).deleteById (anyLong ());
64
+
65
+ // ArgumentCaptor를 사용하여 이벤트 캡처 (파라미터 캡처)
66
+ ArgumentCaptor <MemberEventDto > eventCaptor = forClass (MemberEventDto .class );
67
+ verify (applicationEventPublisher ).publishEvent (eventCaptor .capture ());
68
+
69
+ // 캡처된 이벤트 검증 (파라미터 검증)
70
+ MemberEventDto capturedEvent = eventCaptor .getValue ();
71
+ assertThat (capturedEvent .accessToken ()).isEqualTo ("accessToken" );
56
72
}
57
73
58
74
@ DisplayName ("로그인 및 회원가입 로직을 테스트한다." )
0 commit comments