Skip to content

Commit 0eb6677

Browse files
committed
refactor: 이벤트 경계 검증 통합 테스트는 테스트 컨테이너를 띄우지 않고 진행
1 parent e7a8968 commit 0eb6677

1 file changed

Lines changed: 65 additions & 5 deletions

File tree

src/test/java/com/techfork/personalization/integration/PersonalizedProfileGeneratedAfterCommitIntegrationTest.java

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,61 @@
11
package com.techfork.personalization.integration;
22

3+
import com.techfork.domain.recommendation.listener.PersonalizedProfileGeneratedEventListener;
34
import com.techfork.domain.recommendation.service.RecommendationService;
4-
import com.techfork.global.common.IntegrationTestBase;
55
import com.techfork.personalization.application.event.PersonalizedProfileGeneratedEvent;
66
import com.techfork.useraccount.application.query.lookup.UserLookupService;
77
import com.techfork.useraccount.domain.User;
8+
import org.junit.jupiter.api.BeforeEach;
89
import org.junit.jupiter.api.DisplayName;
10+
import org.junit.jupiter.api.Tag;
911
import org.junit.jupiter.api.Test;
1012
import org.springframework.beans.factory.annotation.Autowired;
1113
import org.springframework.context.ApplicationEventPublisher;
12-
import org.springframework.test.context.bean.override.mockito.MockitoBean;
14+
import org.springframework.context.annotation.Bean;
15+
import org.springframework.context.annotation.Configuration;
16+
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
17+
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
18+
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
19+
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
20+
import org.springframework.transaction.PlatformTransactionManager;
21+
import org.springframework.transaction.annotation.EnableTransactionManagement;
1322
import org.springframework.transaction.support.TransactionTemplate;
1423

1524
import java.util.Arrays;
1625
import java.util.List;
1726

27+
import javax.sql.DataSource;
28+
1829
import static org.mockito.ArgumentMatchers.argThat;
1930
import static org.mockito.ArgumentMatchers.eq;
2031
import static org.mockito.BDDMockito.given;
2132
import static org.mockito.Mockito.mock;
2233
import static org.mockito.Mockito.never;
34+
import static org.mockito.Mockito.reset;
2335
import static org.mockito.Mockito.verify;
2436
import static org.mockito.Mockito.verifyNoInteractions;
2537

26-
class PersonalizedProfileGeneratedAfterCommitIntegrationTest extends IntegrationTestBase {
38+
@Tag("integration")
39+
@SpringJUnitConfig(PersonalizedProfileGeneratedAfterCommitIntegrationTest.TestConfig.class)
40+
class PersonalizedProfileGeneratedAfterCommitIntegrationTest {
2741

2842
@Autowired
2943
private ApplicationEventPublisher eventPublisher;
3044

3145
@Autowired
3246
private TransactionTemplate transactionTemplate;
3347

34-
@MockitoBean
48+
@Autowired
3549
private UserLookupService userLookupService;
3650

37-
@MockitoBean
51+
@Autowired
3852
private RecommendationService recommendationService;
3953

54+
@BeforeEach
55+
void setUp() {
56+
reset(userLookupService, recommendationService);
57+
}
58+
4059
@Test
4160
@DisplayName("프로필 생성 이벤트는 실제 트랜잭션 커밋 이후 추천 생성을 실행한다")
4261
void profileGeneratedEvent_CommittedTransaction_GeneratesRecommendationAfterCommit() {
@@ -80,4 +99,45 @@ void profileGeneratedEvent_RolledBackTransaction_DoesNotGenerateRecommendation()
8099

81100
verifyNoInteractions(userLookupService, recommendationService);
82101
}
102+
103+
@Configuration
104+
@EnableTransactionManagement
105+
static class TestConfig {
106+
107+
@Bean
108+
PersonalizedProfileGeneratedEventListener personalizedProfileGeneratedEventListener(
109+
UserLookupService userLookupService,
110+
RecommendationService recommendationService
111+
) {
112+
return new PersonalizedProfileGeneratedEventListener(userLookupService, recommendationService);
113+
}
114+
115+
@Bean
116+
UserLookupService userLookupService() {
117+
return mock(UserLookupService.class);
118+
}
119+
120+
@Bean
121+
RecommendationService recommendationService() {
122+
return mock(RecommendationService.class);
123+
}
124+
125+
@Bean
126+
DataSource dataSource() {
127+
return new EmbeddedDatabaseBuilder()
128+
.generateUniqueName(true)
129+
.setType(EmbeddedDatabaseType.H2)
130+
.build();
131+
}
132+
133+
@Bean
134+
PlatformTransactionManager transactionManager(DataSource dataSource) {
135+
return new DataSourceTransactionManager(dataSource);
136+
}
137+
138+
@Bean
139+
TransactionTemplate transactionTemplate(PlatformTransactionManager transactionManager) {
140+
return new TransactionTemplate(transactionManager);
141+
}
142+
}
83143
}

0 commit comments

Comments
 (0)