π₯ Testcontainers 컨ν μ΄λ λ°λ³΅ μμ± λ¬Έμ
π₯ Testcontainers 컨ν
μ΄λ λ°λ³΅ μμ± λ¬Έμ
λ¬Έμ μν©
Testcontainers
λ₯Ό ν΅ν΄ ν μ€νΈ μ©λμPostgreSQL
컨ν μ΄λλ₯Ό λμ°κ³ μ μΆμ ν΄λμ€λ₯Ό μμ±νλ€.- νλμ 컨ν μ΄λλ‘ λͺ¨λ μμ ν΄λμ€λ€μ ν μ€νΈλ₯Ό μνν κ²μ΄λΌ μμνμ§λ§ κ·Έλ μ§ μμλ€.
- μ€μ λ‘λ μμ ν΄λμ€ λ³λ‘ 컨ν μ΄λκ° μλ‘ μμ±λμμΌλ©°, ν΄λΉ 컨ν μ΄λμ μ°κ²° λν μ€ν¨νλ€.
λ¬Έμ μμΈ
1
2
3
4
5
6
7
8
9
10
11
12
13
@Testcontainers
public abstract class ContainerBaseTest {
@Container
static PostgreSQLContainer<?> postgresContainer = new PostgreSQLContainer<>("postgres:15-alpine");
@DynamicPropertySource
static void overrideProps(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.url", postgresContainer::getJdbcUrl);
registry.add("spring.datasource.username", postgresContainer::getUsername);
registry.add("spring.datasource.password", postgresContainer::getPassword);
registry.add("file.upload-dir", () -> "/test-uploads");
}
}
@Container
Annotation
μ λμ λ°©μμ΄ λ¬Έμ κ° λμλ€.Testcontainers
λ@Container
κ° λΆμ νλλ₯Ό λ°κ²¬νλ©΄ ν΄λΉ 컨ν μ΄λμ λΌμ΄ν μ¬μ΄ν΄μ μλμΌλ‘ κ΄λ¦¬νλ€.- μΌλ°μ μΌλ‘
static
νλμ@Container
λ₯Ό λΆμ΄λ©΄ ν΄λΉContainer
λ ν μ€νΈ ν΄λμ€ μ 체μμ ν λ²λ§ μμλκ³ μ’ λ£λλ€. - λ¬Έμ λ μ΄ static νλκ° μΆμ ν΄λμ€μ μ μλμ΄ μμ λ λ°μνλ€.
Testcontainers
μJUnit 5
ν΅ν© ν μ€νΈλ μΆμ ν΄λμ€μ μ μλstatic
@Container
νλλ₯Ό μ²λ¦¬ν λ, μ΄λ₯Ό μμ λ°λ κ° κ΅¬μ²΄μ μΈ ν μ€νΈ ν΄λμ€λ§λ€ λ³λμContainer
μΈμ€ν΄μ€λ₯Ό μμνλλ‘ λμνλ€.- μ΄λ
Testcontainers
κ° κ° ν μ€νΈ ν΄λμ€ μ»¨ν μ€νΈ λ΄μμstatic
νλλ₯Ό μ¬μ μνλ λ°©μμΌλ‘ μ²λ¦¬νκΈ° λλ¬Έμ΄λ€.
ν΄κ²° λ°©λ²
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Testcontainers
public abstract class ContainerBaseTest {
private static final PostgreSQLContainer<?> POSTGRES_CONTAINER;
@BeforeAll
static void init() {
Dotenv dotenv = Dotenv.load();
dotenv.entries().forEach(entry ->
System.setProperty(entry.getKey(), entry.getValue())
);
}
static {
POSTGRES_CONTAINER = new PostgreSQLContainer<>("postgres:15-alpine");
POSTGRES_CONTAINER.start();
}
@DynamicPropertySource
static void overrideProps(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.url", POSTGRES_CONTAINER::getJdbcUrl);
registry.add("spring.datasource.username", POSTGRES_CONTAINER::getUsername);
registry.add("spring.datasource.password", POSTGRES_CONTAINER::getPassword);
registry.add("file.upload-dir", () -> "/test-uploads");
}
}
@Container
Annotation
μ μ¬μ©νμ§ μκ³static
λΈλ‘μμContainer
λ₯Ό μλμΌλ‘ μμνλ μ±κΈν€Container
λ₯Ό ꡬμ±νλ κ²μ΄λ€.ContainerBaseTest
ν΄λμ€κ°JVM
μ λ‘λλ λstatic
λΈλ‘μ΄ λ¨ ν λ²λ§ μ€νλμ΄ μ»¨ν μ΄λκ° ν λ²λ§ μμ±λλ€.- μ΄ν
ContainerBaseTest
λ₯Ό μμ λ°λ λͺ¨λ ν μ€νΈ ν΄λμ€λ μ΄ μ΄λ―Έ μμλ λ¨μΌ 컨ν μ΄λ μΈμ€ν΄μ€λ₯Ό 곡μ νκ² λλ€.
νκ³
@Container
Annotation
μ μ¬μ©νμ¬ νΉμ 컨ν μ΄λμ λΌμ΄ν μ¬μ΄ν΄μ μλμΌλ‘ κ΄λ¦¬νκ² νλ€λ κ°λ μ μλλΌλ ꡬ체μ μΈ λ΄λΆ λμμ μμμΌ μλν λλ‘ νκ²½μ ꡬμΆν μ μλ€λ μ¬μ€μ 체κ°νλ€.
This post is licensed under CC BY 4.0 by the author.