Skip to content

Commit e3c69bb

Browse files
committed
test: 캐시프록시서버를 mocking하여 테스트한다
1 parent 10d9e78 commit e3c69bb

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package spring.memewikibe.application;
2+
3+
import org.junit.jupiter.api.BeforeEach;
4+
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.api.extension.ExtendWith;
6+
import org.mockito.InjectMocks;
7+
import org.mockito.Mock;
8+
import org.mockito.junit.jupiter.MockitoExtension;
9+
import spring.memewikibe.api.controller.meme.response.MemeSimpleResponse;
10+
11+
import java.util.Arrays;
12+
import java.util.List;
13+
14+
import static org.assertj.core.api.BDDAssertions.then;
15+
import static org.mockito.Mockito.*;
16+
17+
@ExtendWith(MockitoExtension.class)
18+
class MemeAggregationLookUpCacheProxyServiceTest {
19+
20+
@Mock
21+
private MemeAggregationLookUpServiceImpl mockOriginService;
22+
23+
@InjectMocks
24+
private MemeAggregationLookUpCacheProxyService cacheProxyService;
25+
26+
private List<MemeSimpleResponse> testMemes;
27+
28+
@BeforeEach
29+
void setUp() {
30+
testMemes = Arrays.asList(
31+
new MemeSimpleResponse(1L, "무야호", "무야호.jpg"),
32+
new MemeSimpleResponse(2L, "나만 아니면 돼", "나만아니면돼.jpg"),
33+
new MemeSimpleResponse(3L, "전남친 토스트", "전남친토스트.jpg")
34+
);
35+
}
36+
37+
@Test
38+
void getMostPopularMemes는_캐시가_null이면_원본_서비스를_호출하고_결과를_캐시한다() {
39+
// given
40+
when(mockOriginService.getMostPopularMemes()).thenReturn(testMemes);
41+
42+
// when
43+
List<MemeSimpleResponse> result = cacheProxyService.getMostPopularMemes();
44+
45+
// then
46+
then(result).isEqualTo(testMemes);
47+
verify(mockOriginService, times(1)).getMostPopularMemes();
48+
}
49+
50+
@Test
51+
void getMostPopularMemes_캐시가_있으면_원본_서비스를_호출하지_않고_캐시를_반환한다() {
52+
// given
53+
when(mockOriginService.getMostPopularMemes()).thenReturn(testMemes);
54+
cacheProxyService.warmUpCache();
55+
reset(mockOriginService);
56+
57+
// when
58+
List<MemeSimpleResponse> result = cacheProxyService.getMostPopularMemes();
59+
60+
// then
61+
then(result).isEqualTo(testMemes);
62+
verify(mockOriginService, never()).getMostPopularMemes();
63+
}
64+
65+
@Test
66+
void getMostPopularMemes_여러_번_호출해도_첫_번째만_원본_서비스를_호출한다() {
67+
// given
68+
when(mockOriginService.getMostPopularMemes()).thenReturn(testMemes);
69+
70+
// when
71+
cacheProxyService.getMostPopularMemes();
72+
cacheProxyService.getMostPopularMemes();
73+
cacheProxyService.getMostPopularMemes();
74+
75+
// then
76+
verify(mockOriginService, times(1)).getMostPopularMemes();
77+
}
78+
79+
@Test
80+
void getMostFrequentSharedMemes는_항상_원본_서비스를_호출한다() {
81+
// given
82+
when(mockOriginService.getMostFrequentSharedMemes()).thenReturn(testMemes);
83+
84+
// when
85+
List<MemeSimpleResponse> result1 = cacheProxyService.getMostFrequentSharedMemes();
86+
List<MemeSimpleResponse> result2 = cacheProxyService.getMostFrequentSharedMemes();
87+
88+
// then
89+
then(result1).isEqualTo(testMemes);
90+
then(result2).isEqualTo(testMemes);
91+
verify(mockOriginService, times(2)).getMostFrequentSharedMemes(); // 매번 호출
92+
}
93+
94+
@Test
95+
void getMostFrequentCustomMemes는_항상_원본_서비스를_호출한다() {
96+
// given
97+
when(mockOriginService.getMostFrequentCustomMemes()).thenReturn(testMemes);
98+
99+
// when
100+
List<MemeSimpleResponse> result1 = cacheProxyService.getMostFrequentCustomMemes();
101+
List<MemeSimpleResponse> result2 = cacheProxyService.getMostFrequentCustomMemes();
102+
103+
// then
104+
then(result1).isEqualTo(testMemes);
105+
then(result2).isEqualTo(testMemes);
106+
verify(mockOriginService, times(2)).getMostFrequentCustomMemes(); // 매번 호출
107+
}
108+
}

0 commit comments

Comments
 (0)