From a9467d4e121675d9169731e6e89376007fc9f305 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Sat, 28 Dec 2024 04:28:40 +0900 Subject: [PATCH 1/8] =?UTF-8?q?chore:=20testcontainers=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index ceba38c4b..cc0de5679 100644 --- a/build.gradle +++ b/build.gradle @@ -37,17 +37,25 @@ dependencies {//todo: 안쓰는 의존성이나 deprecated된 의존성 제거 implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final' implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1' implementation 'org.apache.commons:commons-lang3:3.12.0' - testImplementation 'org.mockito:mockito-core:3.3.3' implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'io.micrometer:micrometer-registry-prometheus' + implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + // Lombok compileOnly 'org.projectlombok:lombok:1.18.26' annotationProcessor 'org.projectlombok:lombok' + + // Test testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'com.h2database:h2:2.2.224' + testImplementation 'org.mockito:mockito-core:3.3.3' testImplementation 'io.rest-assured:rest-assured:5.4.0' - implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + // Testcontainers + testImplementation 'org.testcontainers:testcontainers' + testImplementation 'org.testcontainers:junit-jupiter' + testImplementation 'org.testcontainers:mysql' + testImplementation 'com.redis:testcontainers-redis' + annotationProcessor( 'com.querydsl:querydsl-apt:5.0.0:jakarta', 'jakarta.persistence:jakarta.persistence-api:3.1.0', From 7e3b255931f51c57846412a537bc4e3984628f22 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Sat, 28 Dec 2024 04:33:07 +0900 Subject: [PATCH 2/8] =?UTF-8?q?test:=20MySQL,=20Redis=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BB=A8=ED=85=8C=EC=9D=B4=EB=84=88=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/MySQLTestContainer.java | 34 +++++++++++++++++++ .../support/RedisTestContainer.java | 28 +++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/test/java/com/example/solidconnection/support/MySQLTestContainer.java create mode 100644 src/test/java/com/example/solidconnection/support/RedisTestContainer.java diff --git a/src/test/java/com/example/solidconnection/support/MySQLTestContainer.java b/src/test/java/com/example/solidconnection/support/MySQLTestContainer.java new file mode 100644 index 000000000..0256fec13 --- /dev/null +++ b/src/test/java/com/example/solidconnection/support/MySQLTestContainer.java @@ -0,0 +1,34 @@ +package com.example.solidconnection.support; + +import jakarta.annotation.PostConstruct; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.junit.jupiter.Container; + +import javax.sql.DataSource; + +@TestConfiguration +public class MySQLTestContainer { + + @Container + private static final MySQLContainer CONTAINER = new MySQLContainer<>("mysql:8.0"); + + @Bean + public DataSource dataSource() { + return DataSourceBuilder.create() + .url(CONTAINER.getJdbcUrl()) + .username(CONTAINER.getUsername()) + .password(CONTAINER.getPassword()) + .driverClassName(CONTAINER.getDriverClassName()) + .build(); + } + + @PostConstruct + void startContainer() { + if (!CONTAINER.isRunning()) { + CONTAINER.start(); + } + } +} diff --git a/src/test/java/com/example/solidconnection/support/RedisTestContainer.java b/src/test/java/com/example/solidconnection/support/RedisTestContainer.java new file mode 100644 index 000000000..39f35c2d5 --- /dev/null +++ b/src/test/java/com/example/solidconnection/support/RedisTestContainer.java @@ -0,0 +1,28 @@ +package com.example.solidconnection.support; + +import jakarta.annotation.PostConstruct; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.junit.jupiter.Container; + +@TestConfiguration +public class RedisTestContainer { + + @Container + private static final GenericContainer CONTAINER = new GenericContainer<>("redis:7.0"); + + @DynamicPropertySource + static void redisProperties(DynamicPropertyRegistry registry) { + registry.add("spring.redis.host", CONTAINER::getHost); + registry.add("spring.redis.port", CONTAINER::getFirstMappedPort); + } + + @PostConstruct + void startContainer() { + if (!CONTAINER.isRunning()) { + CONTAINER.start(); + } + } +} From 52b7a0d23d3a9b3dcf2e948bc82320ce6a83699e Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Sat, 28 Dec 2024 04:33:31 +0900 Subject: [PATCH 3/8] =?UTF-8?q?test:=20=EC=BB=A4=EC=8A=A4=ED=85=80=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 어노테이션으로 테스트 컨테이너를 사용할 수 있도록 --- .../support/TestContainerDataJpaTest.java | 22 +++++++++++++++++++ .../support/TestContainerSpringBootTest.java | 22 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 src/test/java/com/example/solidconnection/support/TestContainerDataJpaTest.java create mode 100644 src/test/java/com/example/solidconnection/support/TestContainerSpringBootTest.java diff --git a/src/test/java/com/example/solidconnection/support/TestContainerDataJpaTest.java b/src/test/java/com/example/solidconnection/support/TestContainerDataJpaTest.java new file mode 100644 index 000000000..339672e60 --- /dev/null +++ b/src/test/java/com/example/solidconnection/support/TestContainerDataJpaTest.java @@ -0,0 +1,22 @@ +package com.example.solidconnection.support; + +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@DataJpaTest +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +@ActiveProfiles("test") +@Testcontainers +@Import(MySQLTestContainer.class) +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface TestContainerDataJpaTest { +} diff --git a/src/test/java/com/example/solidconnection/support/TestContainerSpringBootTest.java b/src/test/java/com/example/solidconnection/support/TestContainerSpringBootTest.java new file mode 100644 index 000000000..bcb110c6b --- /dev/null +++ b/src/test/java/com/example/solidconnection/support/TestContainerSpringBootTest.java @@ -0,0 +1,22 @@ +package com.example.solidconnection.support; + +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +@ActiveProfiles("test") +@Testcontainers +@Import({MySQLTestContainer.class, RedisTestContainer.class}) +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface TestContainerSpringBootTest { +} From ad7ef7bbb70e832f97c2852b520626c0131c3273 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Sat, 28 Dec 2024 04:37:09 +0900 Subject: [PATCH 4/8] =?UTF-8?q?test:=20TestContainer=20=EC=96=B4=EB=85=B8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/secret | 2 +- .../concurrency/PostLikeCountConcurrencyTest.java | 6 ++---- .../concurrency/PostViewCountConcurrencyTest.java | 6 ++---- .../concurrency/ThunderingHerdTest.java | 6 ++---- .../example/solidconnection/e2e/BaseEndToEndTest.java | 6 ++---- .../e2e/UniversityDataSetUpEndToEndTest.java | 6 ++---- .../unit/repository/BoardRepositoryTest.java | 6 ++---- .../unit/repository/CommentRepositoryTest.java | 7 ++----- .../unit/repository/GpaScoreRepositoryTest.java | 6 ++---- .../repository/LanguageTestScoreRepositoryTest.java | 6 ++---- .../unit/repository/PostLikeRepositoryTest.java | 8 +++----- .../unit/repository/PostRepositoryTest.java | 10 ++++------ 12 files changed, 26 insertions(+), 49 deletions(-) diff --git a/src/main/resources/secret b/src/main/resources/secret index b4f88d141..80a569b4c 160000 --- a/src/main/resources/secret +++ b/src/main/resources/secret @@ -1 +1 @@ -Subproject commit b4f88d14185e2009e0793dfd16d22c2c3b9257ae +Subproject commit 80a569b4c023225c77874e140521c703010414eb diff --git a/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java b/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java index f07b6821c..e553eb4bb 100644 --- a/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java @@ -7,6 +7,7 @@ import com.example.solidconnection.post.service.PostService; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import com.example.solidconnection.support.TestContainerSpringBootTest; import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.type.PreparationStatus; @@ -16,8 +17,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; @@ -26,8 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -@SpringBootTest -@ActiveProfiles("test") +@TestContainerSpringBootTest @DisplayName("게시글 좋아요 동시성 테스트") class PostLikeCountConcurrencyTest { diff --git a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java index c2213993d..dcd423168 100644 --- a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java @@ -7,6 +7,7 @@ import com.example.solidconnection.service.RedisService; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import com.example.solidconnection.support.TestContainerSpringBootTest; import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.type.PreparationStatus; @@ -17,8 +18,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; @@ -28,8 +27,7 @@ import static com.example.solidconnection.type.RedisConstants.*; import static org.junit.jupiter.api.Assertions.assertEquals; -@SpringBootTest -@ActiveProfiles("test") +@TestContainerSpringBootTest @DisplayName("게시글 조회수 동시성 테스트") public class PostViewCountConcurrencyTest { diff --git a/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java b/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java index 7ec6a511e..dce720610 100644 --- a/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java @@ -3,6 +3,7 @@ import com.example.solidconnection.application.service.ApplicationQueryService; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import com.example.solidconnection.support.TestContainerSpringBootTest; import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; @@ -10,9 +11,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.test.context.ActiveProfiles; import java.util.Arrays; import java.util.Collections; @@ -22,8 +21,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -@SpringBootTest -@ActiveProfiles("test") +@TestContainerSpringBootTest @DisplayName("ThunderingHerd 테스트") public class ThunderingHerdTest { @Autowired diff --git a/src/test/java/com/example/solidconnection/e2e/BaseEndToEndTest.java b/src/test/java/com/example/solidconnection/e2e/BaseEndToEndTest.java index 9b23d230e..0b3ac3524 100644 --- a/src/test/java/com/example/solidconnection/e2e/BaseEndToEndTest.java +++ b/src/test/java/com/example/solidconnection/e2e/BaseEndToEndTest.java @@ -1,16 +1,14 @@ package com.example.solidconnection.e2e; import com.example.solidconnection.support.DatabaseClearExtension; +import com.example.solidconnection.support.TestContainerSpringBootTest; import io.restassured.RestAssured; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.server.LocalServerPort; -import org.springframework.test.context.ActiveProfiles; +@TestContainerSpringBootTest @ExtendWith(DatabaseClearExtension.class) -@ActiveProfiles("test") -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) abstract class BaseEndToEndTest { @LocalServerPort diff --git a/src/test/java/com/example/solidconnection/e2e/UniversityDataSetUpEndToEndTest.java b/src/test/java/com/example/solidconnection/e2e/UniversityDataSetUpEndToEndTest.java index 9afecbbfd..20a0bbc6b 100644 --- a/src/test/java/com/example/solidconnection/e2e/UniversityDataSetUpEndToEndTest.java +++ b/src/test/java/com/example/solidconnection/e2e/UniversityDataSetUpEndToEndTest.java @@ -5,6 +5,7 @@ import com.example.solidconnection.repositories.CountryRepository; import com.example.solidconnection.repositories.RegionRepository; import com.example.solidconnection.support.DatabaseClearExtension; +import com.example.solidconnection.support.TestContainerSpringBootTest; import com.example.solidconnection.type.LanguageTestType; import com.example.solidconnection.university.domain.LanguageRequirement; import com.example.solidconnection.university.domain.University; @@ -17,9 +18,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.server.LocalServerPort; -import org.springframework.test.context.ActiveProfiles; import java.util.HashSet; @@ -27,8 +26,7 @@ import static com.example.solidconnection.type.TuitionFeeType.HOME_UNIVERSITY_PAYMENT; @ExtendWith(DatabaseClearExtension.class) -@ActiveProfiles("test") -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@TestContainerSpringBootTest abstract class UniversityDataSetUpEndToEndTest { public static Region 영미권; diff --git a/src/test/java/com/example/solidconnection/unit/repository/BoardRepositoryTest.java b/src/test/java/com/example/solidconnection/unit/repository/BoardRepositoryTest.java index 9ea7ee0d9..17e74d140 100644 --- a/src/test/java/com/example/solidconnection/unit/repository/BoardRepositoryTest.java +++ b/src/test/java/com/example/solidconnection/unit/repository/BoardRepositoryTest.java @@ -7,6 +7,7 @@ import com.example.solidconnection.post.repository.PostRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import com.example.solidconnection.support.TestContainerDataJpaTest; import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.type.PreparationStatus; @@ -16,16 +17,13 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_BOARD_CODE; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; -@DataJpaTest -@ActiveProfiles("test") +@TestContainerDataJpaTest @DisplayName("게시판 레포지토리 테스트") class BoardRepositoryTest { @Autowired diff --git a/src/test/java/com/example/solidconnection/unit/repository/CommentRepositoryTest.java b/src/test/java/com/example/solidconnection/unit/repository/CommentRepositoryTest.java index a53037346..b57288725 100644 --- a/src/test/java/com/example/solidconnection/unit/repository/CommentRepositoryTest.java +++ b/src/test/java/com/example/solidconnection/unit/repository/CommentRepositoryTest.java @@ -9,6 +9,7 @@ import com.example.solidconnection.post.repository.PostRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import com.example.solidconnection.support.TestContainerDataJpaTest; import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.type.PreparationStatus; @@ -17,8 +18,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -28,9 +27,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; - -@SpringBootTest -@ActiveProfiles("dev") +@TestContainerDataJpaTest @DisplayName("댓글 레포지토리 테스트") class CommentRepositoryTest { @Autowired diff --git a/src/test/java/com/example/solidconnection/unit/repository/GpaScoreRepositoryTest.java b/src/test/java/com/example/solidconnection/unit/repository/GpaScoreRepositoryTest.java index e3fa680c2..3ec59a5c2 100644 --- a/src/test/java/com/example/solidconnection/unit/repository/GpaScoreRepositoryTest.java +++ b/src/test/java/com/example/solidconnection/unit/repository/GpaScoreRepositoryTest.java @@ -5,6 +5,7 @@ import com.example.solidconnection.score.repository.GpaScoreRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import com.example.solidconnection.support.TestContainerDataJpaTest; import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; @@ -12,8 +13,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; @@ -21,8 +20,7 @@ import static org.assertj.core.api.Assertions.assertThat; -@DataJpaTest -@ActiveProfiles("test") +@TestContainerDataJpaTest @DisplayName("학점 레포지토리 테스트") @Transactional public class GpaScoreRepositoryTest { diff --git a/src/test/java/com/example/solidconnection/unit/repository/LanguageTestScoreRepositoryTest.java b/src/test/java/com/example/solidconnection/unit/repository/LanguageTestScoreRepositoryTest.java index 7369f20fa..0090088c1 100644 --- a/src/test/java/com/example/solidconnection/unit/repository/LanguageTestScoreRepositoryTest.java +++ b/src/test/java/com/example/solidconnection/unit/repository/LanguageTestScoreRepositoryTest.java @@ -5,6 +5,7 @@ import com.example.solidconnection.score.repository.LanguageTestScoreRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import com.example.solidconnection.support.TestContainerDataJpaTest; import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.LanguageTestType; import com.example.solidconnection.type.PreparationStatus; @@ -13,8 +14,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; @@ -22,8 +21,7 @@ import static org.assertj.core.api.Assertions.assertThat; -@DataJpaTest -@ActiveProfiles("test") +@TestContainerDataJpaTest @DisplayName("어학성적 레포지토리 테스트") @Transactional public class LanguageTestScoreRepositoryTest { diff --git a/src/test/java/com/example/solidconnection/unit/repository/PostLikeRepositoryTest.java b/src/test/java/com/example/solidconnection/unit/repository/PostLikeRepositoryTest.java index c39e28497..43ac210cb 100644 --- a/src/test/java/com/example/solidconnection/unit/repository/PostLikeRepositoryTest.java +++ b/src/test/java/com/example/solidconnection/unit/repository/PostLikeRepositoryTest.java @@ -3,12 +3,13 @@ import com.example.solidconnection.board.domain.Board; import com.example.solidconnection.board.repository.BoardRepository; import com.example.solidconnection.custom.exception.CustomException; +import com.example.solidconnection.post.domain.Post; import com.example.solidconnection.post.domain.PostLike; import com.example.solidconnection.post.repository.PostLikeRepository; -import com.example.solidconnection.post.domain.Post; import com.example.solidconnection.post.repository.PostRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import com.example.solidconnection.support.TestContainerDataJpaTest; import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.type.PreparationStatus; @@ -17,8 +18,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_POST_LIKE; @@ -26,8 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -@DataJpaTest -@ActiveProfiles("test") +@TestContainerDataJpaTest @DisplayName("게시글 좋아요 레포지토리 테스트") class PostLikeRepositoryTest { @Autowired diff --git a/src/test/java/com/example/solidconnection/unit/repository/PostRepositoryTest.java b/src/test/java/com/example/solidconnection/unit/repository/PostRepositoryTest.java index ecc2c4f6d..42da9de22 100644 --- a/src/test/java/com/example/solidconnection/unit/repository/PostRepositoryTest.java +++ b/src/test/java/com/example/solidconnection/unit/repository/PostRepositoryTest.java @@ -8,6 +8,7 @@ import com.example.solidconnection.post.repository.PostRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import com.example.solidconnection.support.TestContainerDataJpaTest; import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.type.PreparationStatus; @@ -16,20 +17,17 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_POST_ID; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; -@DataJpaTest -@ActiveProfiles("test") +@TestContainerDataJpaTest @DisplayName("게시글 레포지토리 테스트") class PostRepositoryTest { @Autowired From dac50bb8fe82a541b4ad407dddd300b97f909fa8 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Sat, 28 Dec 2024 04:38:04 +0900 Subject: [PATCH 5/8] =?UTF-8?q?test:=20DatabaseCleaner=EC=97=90=20MySQL=20?= =?UTF-8?q?=EB=AC=B8=EB=B2=95=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/solidconnection/support/DatabaseCleaner.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/example/solidconnection/support/DatabaseCleaner.java b/src/test/java/com/example/solidconnection/support/DatabaseCleaner.java index 098a22c18..bb77f82f2 100644 --- a/src/test/java/com/example/solidconnection/support/DatabaseCleaner.java +++ b/src/test/java/com/example/solidconnection/support/DatabaseCleaner.java @@ -32,17 +32,18 @@ public void clear() { } private void truncate() { - em.createNativeQuery("SET REFERENTIAL_INTEGRITY FALSE").executeUpdate(); + em.createNativeQuery("SET FOREIGN_KEY_CHECKS = 0").executeUpdate(); getTruncateQueries().forEach(query -> em.createNativeQuery(query).executeUpdate()); - em.createNativeQuery("SET REFERENTIAL_INTEGRITY TRUE").executeUpdate(); + em.createNativeQuery("SET FOREIGN_KEY_CHECKS = 1").executeUpdate(); } @SuppressWarnings("unchecked") private List getTruncateQueries() { String sql = """ - SELECT Concat('TRUNCATE TABLE ', TABLE_NAME, ' RESTART IDENTITY', ';') AS q + SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME, ';') AS q FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = 'PUBLIC' + WHERE TABLE_SCHEMA = (SELECT DATABASE()) + AND TABLE_TYPE = 'BASE TABLE' """; return em.createNativeQuery(sql).getResultList(); From a3c76226d37e576c30257d94d3bad400e5249012 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Sat, 28 Dec 2024 04:45:56 +0900 Subject: [PATCH 6/8] =?UTF-8?q?test:=20=EA=B9=A8=EC=A7=80=EB=8A=94=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/com/example/solidconnection/e2e/SignUpTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/example/solidconnection/e2e/SignUpTest.java b/src/test/java/com/example/solidconnection/e2e/SignUpTest.java index 2da99def8..eff3e54b5 100644 --- a/src/test/java/com/example/solidconnection/e2e/SignUpTest.java +++ b/src/test/java/com/example/solidconnection/e2e/SignUpTest.java @@ -105,7 +105,7 @@ class SignUpTest extends BaseEndToEndTest { assertAll( "관심 지역과 나라 정보를 저장한다.", () -> assertThat(interestedRegions).containsExactlyInAnyOrder(region), - () -> assertThat(interestedCountries).containsExactlyElementsOf(countries) + () -> assertThat(interestedCountries).containsExactlyInAnyOrderElementsOf(countries) ); assertThat(redisTemplate.opsForValue().get(TokenType.REFRESH.addTokenPrefixToSubject(email))) From 0d5482462117c902976088d17b1c2becb896ae16 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Sat, 28 Dec 2024 04:47:11 +0900 Subject: [PATCH 7/8] =?UTF-8?q?test:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20disabled?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/database/DatabaseConnectionTest.java | 2 ++ .../example/solidconnection/database/RedisConnectionTest.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/test/java/com/example/solidconnection/database/DatabaseConnectionTest.java b/src/test/java/com/example/solidconnection/database/DatabaseConnectionTest.java index a9d80afcc..d156cf485 100644 --- a/src/test/java/com/example/solidconnection/database/DatabaseConnectionTest.java +++ b/src/test/java/com/example/solidconnection/database/DatabaseConnectionTest.java @@ -1,5 +1,6 @@ package com.example.solidconnection.database; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -17,6 +18,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.junit.jupiter.api.Assertions.assertAll; +@Disabled @AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2, replace = AutoConfigureTestDatabase.Replace.ANY) @ActiveProfiles("test") @DataJpaTest diff --git a/src/test/java/com/example/solidconnection/database/RedisConnectionTest.java b/src/test/java/com/example/solidconnection/database/RedisConnectionTest.java index 6a7637ed5..69fcedaef 100644 --- a/src/test/java/com/example/solidconnection/database/RedisConnectionTest.java +++ b/src/test/java/com/example/solidconnection/database/RedisConnectionTest.java @@ -1,5 +1,6 @@ package com.example.solidconnection.database; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -9,6 +10,7 @@ import static org.assertj.core.api.Assertions.assertThat; +@Disabled @ActiveProfiles("test") @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) class RedisConnectionTest { From 7bbd3cd05dbb20c75006e652e94e96cb0bc38a76 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Wed, 8 Jan 2025 04:27:39 +0900 Subject: [PATCH 8/8] =?UTF-8?q?chore:=20redis=20test=20container=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle b/build.gradle index cc0de5679..24f5e41c4 100644 --- a/build.gradle +++ b/build.gradle @@ -54,7 +54,6 @@ dependencies {//todo: 안쓰는 의존성이나 deprecated된 의존성 제거 testImplementation 'org.testcontainers:testcontainers' testImplementation 'org.testcontainers:junit-jupiter' testImplementation 'org.testcontainers:mysql' - testImplementation 'com.redis:testcontainers-redis' annotationProcessor( 'com.querydsl:querydsl-apt:5.0.0:jakarta',