Skip to content

Commit c8865c1

Browse files
committed
test: 동기 / 비동기 분리 및 테스트 변경
1 parent caa996f commit c8865c1

6 files changed

+49
-32
lines changed

backend/src/test/java/config/TestAsyncConfig.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import org.springframework.boot.test.context.TestConfiguration;
44
import org.springframework.context.annotation.Bean;
5-
import org.springframework.core.task.SyncTaskExecutor;
5+
import org.springframework.core.task.SimpleAsyncTaskExecutor;
66
import org.springframework.core.task.TaskExecutor;
77
import org.springframework.scheduling.annotation.EnableAsync;
88

@@ -12,6 +12,6 @@ public class TestAsyncConfig {
1212

1313
@Bean
1414
public TaskExecutor taskExecutor() {
15-
return new SyncTaskExecutor();
15+
return new SimpleAsyncTaskExecutor();
1616
}
1717
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package config;
2+
3+
import org.springframework.boot.test.context.TestConfiguration;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.core.task.SyncTaskExecutor;
6+
import org.springframework.core.task.TaskExecutor;
7+
import org.springframework.scheduling.annotation.EnableAsync;
8+
9+
@TestConfiguration
10+
@EnableAsync
11+
public class TestSyncConfig {
12+
13+
@Bean
14+
public TaskExecutor taskExecutor() {
15+
return new SyncTaskExecutor();
16+
}
17+
}

backend/src/test/java/corea/scheduler/service/AutomaticMatchingExecutorTest.java

+16-16
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,20 @@
2222
import org.junit.jupiter.api.BeforeEach;
2323
import org.junit.jupiter.api.DisplayName;
2424
import org.junit.jupiter.api.Test;
25+
import org.mockito.Mockito;
2526
import org.springframework.beans.factory.annotation.Autowired;
2627
import org.springframework.boot.test.mock.mockito.MockBean;
28+
import org.springframework.boot.test.mock.mockito.SpyBean;
2729
import org.springframework.context.annotation.Import;
2830

2931
import java.time.LocalDateTime;
3032
import java.util.Map;
3133
import java.util.concurrent.CountDownLatch;
3234
import java.util.concurrent.ExecutorService;
3335
import java.util.concurrent.Executors;
34-
import java.util.concurrent.atomic.AtomicInteger;
3536

36-
import static org.assertj.core.api.Assertions.assertThat;
3737
import static org.mockito.ArgumentMatchers.any;
38+
import static org.mockito.ArgumentMatchers.anyLong;
3839
import static org.mockito.Mockito.when;
3940

4041
@ServiceTest
@@ -59,16 +60,19 @@ class AutomaticMatchingExecutorTest {
5960
@MockBean
6061
private PullRequestProvider pullRequestProvider;
6162

63+
@Autowired
64+
private RoomMatchInfoRepository roomMatchInfoRepository;
65+
66+
@SpyBean
67+
MatchingExecutor matchingExecutor;
68+
6269
private Room room;
63-
private Room emptyParticipantRoom;
6470
private Member pororo;
6571
private Member ash;
6672
private Member joysun;
6773
private Member movin;
6874
private Member ten;
6975
private Member cho;
70-
@Autowired
71-
private RoomMatchInfoRepository roomMatchInfoRepository;
7276

7377
@BeforeEach
7478
void setUp() {
@@ -79,9 +83,9 @@ void setUp() {
7983
ten = memberRepository.save(MemberFixture.MEMBER_TENTEN());
8084
cho = memberRepository.save(MemberFixture.MEMBER_CHOCO());
8185

82-
room = roomRepository.save(RoomFixture.ROOM_DOMAIN(pororo, LocalDateTime.now().plusSeconds(3)));
83-
roomMatchInfoRepository.save(new RoomMatchInfo(room.getId(),true));
84-
emptyParticipantRoom = roomRepository.save(RoomFixture.ROOM_DOMAIN(ash, LocalDateTime.now().plusSeconds(3)));
86+
room = roomRepository.save(RoomFixture.ROOM_DOMAIN(pororo, LocalDateTime.now()
87+
.plusSeconds(3)));
88+
roomMatchInfoRepository.save(new RoomMatchInfo(room.getId(), true));
8589

8690
participationRepository.save(new Participation(room, pororo, MemberRole.BOTH, room.getMatchingSize()));
8791
participationRepository.save(new Participation(room, ash, MemberRole.BOTH, room.getMatchingSize()));
@@ -121,17 +125,14 @@ private PullRequestInfo getPullRequestInfo(Member pororo, Member ash, Member joy
121125
@Test
122126
@DisplayName("동시에 10개의 자동 매칭을 실행해도 PESSIMISTIC_WRITE 락을 통해 동시성을 제어할 수 있다.")
123127
void startMatchingWithLock() throws InterruptedException {
124-
AutomaticMatching automaticMatching = automaticMatchingRepository.save(new AutomaticMatching(room.getId(), LocalDateTime.now().plusDays(1)));
128+
AutomaticMatching automaticMatching = automaticMatchingRepository.save(new AutomaticMatching(room.getId(), LocalDateTime.now()
129+
.plusDays(1)));
125130

126131
int threadCount = 10;
127132
ExecutorService executorService = Executors.newFixedThreadPool(threadCount);
128133
CountDownLatch latch = new CountDownLatch(threadCount);
129-
AtomicInteger successCount = new AtomicInteger(0);
130134

131-
when(pullRequestProvider.getUntilDeadline(any(), any())).thenAnswer(ignore -> {
132-
successCount.incrementAndGet();
133-
return getPullRequestInfo(pororo, ash, joysun, movin, ten, cho);
134-
});
135+
when(pullRequestProvider.getUntilDeadline(any(), any())).thenReturn(getPullRequestInfo(pororo, ash, joysun, movin, ten, cho));
135136

136137
for (int i = 0; i < threadCount; i++) {
137138
executorService.execute(() -> {
@@ -144,7 +145,6 @@ void startMatchingWithLock() throws InterruptedException {
144145
}
145146

146147
latch.await();
147-
148-
assertThat(successCount.get()).isEqualTo(1);
148+
Mockito.verify(matchingExecutor,Mockito.times(1)).match(anyLong());
149149
}
150150
}

backend/src/test/java/corea/scheduler/service/AutomaticUpdateExecutorTest.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,18 @@
1717
import org.junit.jupiter.api.BeforeEach;
1818
import org.junit.jupiter.api.DisplayName;
1919
import org.junit.jupiter.api.Test;
20+
import org.mockito.Mockito;
2021
import org.springframework.beans.factory.annotation.Autowired;
2122
import org.springframework.boot.test.mock.mockito.MockBean;
23+
import org.springframework.boot.test.mock.mockito.SpyBean;
2224
import org.springframework.context.annotation.Import;
2325

2426
import java.time.LocalDateTime;
2527
import java.util.Collections;
2628
import java.util.concurrent.CountDownLatch;
2729
import java.util.concurrent.ExecutorService;
2830
import java.util.concurrent.Executors;
29-
import java.util.concurrent.atomic.AtomicInteger;
3031

31-
import static org.assertj.core.api.Assertions.assertThat;
3232
import static org.mockito.ArgumentMatchers.any;
3333
import static org.mockito.ArgumentMatchers.anyLong;
3434
import static org.mockito.Mockito.when;
@@ -52,6 +52,9 @@ class AutomaticUpdateExecutorTest {
5252
@MockBean
5353
private MatchResultRepository matchResultRepository;
5454

55+
@SpyBean
56+
UpdateExecutor updateExecutor;
57+
5558
private Room room;
5659

5760
@BeforeEach
@@ -65,17 +68,15 @@ void setUp() {
6568
@Test
6669
@DisplayName("동시에 10개의 자동 업데이트를 실행해도 PESSIMISTIC_WRITE 락을 통해 동시성을 제어할 수 있다.")
6770
void startMatchingWithLock() throws InterruptedException {
68-
AutomaticUpdate automaticUpdate = automaticUpdateRepository.save(new AutomaticUpdate(room.getId(), LocalDateTime.now().plusDays(1)));
71+
AutomaticUpdate automaticUpdate = automaticUpdateRepository.save(new AutomaticUpdate(room.getId(), LocalDateTime.now()
72+
.plusDays(1)));
6973

7074
int threadCount = 10;
7175
ExecutorService executorService = Executors.newFixedThreadPool(threadCount);
7276
CountDownLatch latch = new CountDownLatch(threadCount);
73-
AtomicInteger successCount = new AtomicInteger(0);
7477

75-
when(matchResultRepository.findAllByRoomIdAndReviewStatus(anyLong(), any(ReviewStatus.class))).thenAnswer(ignore -> {
76-
successCount.incrementAndGet();
77-
return Collections.singletonList(new MatchResult(room.getId(), MemberFixture.MEMBER_PORORO(), MemberFixture.MEMBER_MOVIN(), ""));
78-
});
78+
when(matchResultRepository.findAllByRoomIdAndReviewStatus(anyLong(), any(ReviewStatus.class)))
79+
.thenReturn(Collections.singletonList(new MatchResult(room.getId(), MemberFixture.MEMBER_PORORO(), MemberFixture.MEMBER_MOVIN(), "")));
7980

8081
for (int i = 0; i < threadCount; i++) {
8182
executorService.execute(() -> {
@@ -88,7 +89,6 @@ void startMatchingWithLock() throws InterruptedException {
8889
}
8990

9091
latch.await();
91-
92-
assertThat(successCount.get()).isEqualTo(1);
92+
Mockito.verify(updateExecutor,Mockito.times(1)).update(anyLong());
9393
}
9494
}

backend/src/test/java/corea/scheduler/service/MatchingExecutorTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package corea.scheduler.service;
22

33
import config.ServiceTest;
4-
import config.TestAsyncConfig;
4+
import config.TestSyncConfig;
55
import corea.alarm.domain.AlarmActionType;
66
import corea.alarm.domain.ServerToUserAlarm;
77
import corea.alarm.repository.ServerToUserAlarmRepository;
@@ -42,7 +42,7 @@
4242
import static org.mockito.Mockito.when;
4343

4444
@ServiceTest
45-
@Import(TestAsyncConfig.class)
45+
@Import(TestSyncConfig.class)
4646
class MatchingExecutorTest {
4747

4848
@Autowired

backend/src/test/java/corea/scheduler/service/UpdateExecutorTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package corea.scheduler.service;
22

33
import config.ServiceTest;
4-
import config.TestAsyncConfig;
4+
import config.TestSyncConfig;
55
import corea.fixture.MemberFixture;
66
import corea.fixture.RoomFixture;
77
import corea.member.domain.Member;
@@ -22,7 +22,7 @@
2222
import static org.assertj.core.api.Assertions.assertThat;
2323

2424
@ServiceTest
25-
@Import(TestAsyncConfig.class)
25+
@Import(TestSyncConfig.class)
2626
class UpdateExecutorTest {
2727

2828
@Autowired

0 commit comments

Comments
 (0)