Skip to content

Commit 122dd37

Browse files
authored
Merge pull request #11 from Modern-Programming-Club/feature/3.2.1.-add-unit-test
Feature/3.2.1. add unit test
2 parents 2beb52f + 107e9d8 commit 122dd37

File tree

7 files changed

+130
-9
lines changed

7 files changed

+130
-9
lines changed

spring-boot/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ dependencies {
3737

3838
testImplementation 'org.springframework.boot:spring-boot-starter-test'
3939
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
40+
testImplementation 'org.projectlombok:lombok'
41+
testAnnotationProcessor 'org.projectlombok:lombok'
4042
}
4143

4244
tasks.named('test') {

spring-boot/src/test/java/com/mpc/springboot/member/infrastructure/persistence/jpa/repository/MemberRepositoryTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.mpc.springboot.member.domain.vo.MemberCode;
99
import com.mpc.springboot.member.domain.vo.MemberName;
1010
import com.mpc.springboot.shared.AbstractRepositoryTest;
11+
import com.mpc.springboot.shared.type.TestTag;
1112
import org.junit.jupiter.api.*;
1213

1314
import static org.junit.jupiter.api.Assertions.*;
@@ -28,7 +29,7 @@ protected void setUp() {
2829
}
2930

3031
@DisplayName("멤버 저장 테스트")
31-
@Tag(NO_SETUP)
32+
@Tag(TestTag.NO_SETUP)
3233
@Test
3334
void save() {
3435
// given
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.mpc.springboot.member.presentation.controller;
2+
3+
import com.mpc.springboot.member.domain.entity.Member;
4+
import com.mpc.springboot.member.domain.repository.MemberRepository;
5+
import com.mpc.springboot.member.domain.vo.MemberCode;
6+
import com.mpc.springboot.member.domain.vo.MemberName;
7+
import com.mpc.springboot.shared.AbstractIntegrationTest;
8+
import com.mpc.springboot.shared.type.TestTag;
9+
import org.junit.jupiter.api.*;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.http.MediaType;
12+
13+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
14+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
15+
16+
17+
class MemberRestControllerIntegrationTest extends AbstractIntegrationTest {
18+
19+
private Member savedMember;
20+
21+
@Autowired
22+
private MemberRepository memberRepository;
23+
24+
@Override
25+
protected void setUp() {
26+
// given
27+
MemberCode code = MemberCode.of("T0000001");
28+
MemberName name = MemberName.of("Alice", "Smith");
29+
savedMember = memberRepository.save(Member.of(code, name));
30+
}
31+
32+
@DisplayName("멤버 생성 API 통합 테스트")
33+
@Tag(TestTag.NO_SETUP)
34+
@Test
35+
void createMember() throws Exception {
36+
// given
37+
MemberCode code = MemberCode.of("T0000001");
38+
MemberName name = MemberName.of("Alice", "Smith");
39+
Member member = Member.of(code, name);
40+
41+
// when & then
42+
mockMvc.perform(post("/api/v1/members")
43+
.contentType(MediaType.APPLICATION_JSON)
44+
.content(objectMapper.writeValueAsString(member)))
45+
.andExpect(status().isOk());
46+
}
47+
48+
49+
50+
@DisplayName("멤버 조회 API 통합 테스트")
51+
@Test
52+
void getMemberBy() throws Exception {
53+
// given
54+
MemberCode code = savedMember.getCode();
55+
MemberName name = savedMember.getName();
56+
57+
// when & then
58+
mockMvc.perform(get("/api/v1/members/{code}", code.getValue()))
59+
.andExpect(status().isOk())
60+
.andExpect(jsonPath("$.code.value").value(code.getValue()))
61+
.andExpect(jsonPath("$.name.firstName").value(name.getFirstName()))
62+
.andExpect(jsonPath("$.name.lastName").value(name.getLastName()))
63+
.andExpect(jsonPath("$.name.fullName").value(name.getFullName()));
64+
}
65+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.mpc.springboot.shared;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
5+
import org.springframework.boot.test.context.SpringBootTest;
6+
import org.springframework.test.web.servlet.MockMvc;
7+
import org.springframework.transaction.annotation.Transactional;
8+
import com.fasterxml.jackson.databind.ObjectMapper;
9+
import com.mpc.springboot.Application;
10+
import com.mpc.springboot.shared.utils.TagUtils;
11+
import org.junit.jupiter.api.*;
12+
13+
14+
@SpringBootTest(classes = Application.class)
15+
@AutoConfigureMockMvc
16+
@Transactional
17+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
18+
public abstract class AbstractIntegrationTest {
19+
20+
@Autowired
21+
protected MockMvc mockMvc;
22+
23+
@Autowired
24+
protected ObjectMapper objectMapper;
25+
26+
27+
@BeforeEach
28+
void commonSetUp(TestInfo testInfo) {
29+
if (TagUtils.hasNoSetupTag(testInfo)) {
30+
return;
31+
}
32+
setUp();
33+
}
34+
35+
protected abstract void setUp();
36+
}

spring-boot/src/test/java/com/mpc/springboot/shared/AbstractRepositoryTest.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,21 @@
33
import jakarta.transaction.Transactional;
44

55
import org.springframework.boot.test.context.SpringBootTest;
6+
import com.mpc.springboot.shared.utils.TagUtils;
67
import org.junit.jupiter.api.*;
78

89
@SpringBootTest
910
@Transactional
1011
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
1112
public abstract class AbstractRepositoryTest {
1213

13-
protected static final String NO_SETUP = "NoSetup";
14-
1514
@BeforeEach
1615
void commonSetUp(TestInfo testInfo) {
17-
if (hasNoSetupTag(testInfo)) {
16+
if (TagUtils.hasNoSetupTag(testInfo)) {
1817
return;
1918
}
2019
setUp();
2120
}
2221

23-
private static boolean hasNoSetupTag(TestInfo testInfo) {
24-
return testInfo.getTags()
25-
.contains(NO_SETUP);
26-
}
27-
2822
protected abstract void setUp();
2923
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.mpc.springboot.shared.type;
2+
3+
4+
public class TestTag {
5+
6+
public static final String NO_SETUP = "no-setup";
7+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.mpc.springboot.shared.utils;
2+
3+
import com.mpc.springboot.shared.type.TestTag;
4+
import org.junit.jupiter.api.TestInfo;
5+
6+
public class TagUtils {
7+
8+
private TagUtils() {
9+
// Utility class
10+
}
11+
12+
public static boolean hasNoSetupTag(TestInfo testInfo) {
13+
return testInfo.getTags()
14+
.contains(TestTag.NO_SETUP);
15+
}
16+
}

0 commit comments

Comments
 (0)