Skip to content

Commit f9e05b0

Browse files
refactor: 대학 관련 통합 테스트 데이터 정의 구조 개선 (#286)
* refactor: 메서드 체이닝으로 대학 test fixture 생성 * refactor: UniversityQueryServiceTest에 임시 반영 * chore: 테스트 환경에서 lombok 사용을 위한 의존성 추가 * test: 메서드 체이닝을 활용하여 대학 관련 Fixture 클래스 추가 * test: 대학 생성을 위한 Fixture Helper 클래스 추가 * test: Fixture Helper 클래스 실제 대학 테스트에 적용 * chore: 사용하지 않는 BuilderSupporter 클래스 제거 * refactor: 내가 생각한 방향 구현 * refactor: 테스트 코드 컴포넌트 @TestComponent로 변경 * refactor: 패키지 구조를 도메인 중심으로 개선 * feat: RegionFixture에 지역 생성 메서드 추가 * feat: CountryFixture에 국가 생성 메서드 추가 * feat: UniversityFixture에 대학 생성 메서드 추가 * feat: UniversityInfoForApplyFixture에 대학 지원 생성 메서드 추가 * feat: LanguageRequirementFixture에 언어 요구사항 생성 메서드 추가 * test: 추가한 Fixture 함수 테스트에 반영 * chore: 대학 정보 이름 실제 데이터와 일치하게 반영 * refactor: 언어 요구사항 데이터 세팅 방식 변경 --------- Co-authored-by: nayonsoso <panda0329@naver.com>
1 parent c0f79cc commit f9e05b0

15 files changed

+656
-62
lines changed

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ dependencies {
5858
testImplementation 'org.testcontainers:testcontainers'
5959
testImplementation 'org.testcontainers:junit-jupiter'
6060
testImplementation 'org.testcontainers:mysql'
61+
testImplementation 'org.projectlombok:lombok'
62+
testAnnotationProcessor 'org.projectlombok:lombok'
6163

6264
// Etc
6365
implementation 'org.hibernate.validator:hibernate-validator'
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.example.solidconnection.country.fixture;
2+
3+
import com.example.solidconnection.entity.Country;
4+
import com.example.solidconnection.region.fixture.RegionFixture;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.boot.test.context.TestComponent;
7+
8+
@TestComponent
9+
@RequiredArgsConstructor
10+
public class CountryFixture {
11+
12+
private final RegionFixture regionFixture;
13+
private final CountryFixtureBuilder countryFixtureBuilder;
14+
15+
public Country 미국() {
16+
return countryFixtureBuilder.country()
17+
.code("US")
18+
.koreanName("미국")
19+
.region(regionFixture.영미권())
20+
.findOrCreate();
21+
}
22+
23+
public Country 캐나다() {
24+
return countryFixtureBuilder.country()
25+
.code("CA")
26+
.koreanName("캐나다")
27+
.region(regionFixture.영미권())
28+
.findOrCreate();
29+
}
30+
31+
public Country 덴마크() {
32+
return countryFixtureBuilder.country()
33+
.code("DK")
34+
.koreanName("덴마크")
35+
.region(regionFixture.유럽())
36+
.findOrCreate();
37+
}
38+
39+
public Country 오스트리아() {
40+
return countryFixtureBuilder.country()
41+
.code("AT")
42+
.koreanName("오스트리아")
43+
.region(regionFixture.유럽())
44+
.findOrCreate();
45+
}
46+
47+
public Country 일본() {
48+
return countryFixtureBuilder.country()
49+
.code("JP")
50+
.koreanName("일본")
51+
.region(regionFixture.아시아())
52+
.findOrCreate();
53+
}
54+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.example.solidconnection.country.fixture;
2+
3+
import com.example.solidconnection.entity.Country;
4+
import com.example.solidconnection.entity.Region;
5+
import com.example.solidconnection.country.repository.CountryRepositoryForTest;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.boot.test.context.TestComponent;
8+
9+
@TestComponent
10+
@RequiredArgsConstructor
11+
public class CountryFixtureBuilder {
12+
13+
private final CountryRepositoryForTest countryRepositoryForTest;
14+
15+
private String code;
16+
private String koreanName;
17+
private Region region;
18+
19+
public CountryFixtureBuilder country() {
20+
return new CountryFixtureBuilder(countryRepositoryForTest);
21+
}
22+
23+
public CountryFixtureBuilder code(String code) {
24+
this.code = code;
25+
return this;
26+
}
27+
28+
public CountryFixtureBuilder koreanName(String koreanName) {
29+
this.koreanName = koreanName;
30+
return this;
31+
}
32+
33+
public CountryFixtureBuilder region(Region region) {
34+
this.region = region;
35+
return this;
36+
}
37+
38+
public Country findOrCreate() {
39+
return countryRepositoryForTest.findByCode(code)
40+
.orElseGet(() -> countryRepositoryForTest.save(new Country(code, koreanName, region)));
41+
}
42+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.example.solidconnection.country.repository;
2+
3+
import com.example.solidconnection.entity.Country;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
import java.util.Optional;
7+
8+
public interface CountryRepositoryForTest extends JpaRepository<Country, Long> {
9+
10+
Optional<Country> findByCode(String code);
11+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.example.solidconnection.region.fixture;
2+
3+
import com.example.solidconnection.entity.Region;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.boot.test.context.TestComponent;
6+
7+
@TestComponent
8+
@RequiredArgsConstructor
9+
public class RegionFixture {
10+
11+
private final RegionFixtureBuilder regionFixtureBuilder;
12+
13+
public Region 영미권() {
14+
return regionFixtureBuilder.region()
15+
.code("AMERICAS")
16+
.koreanName("영미권")
17+
.findOrCreate();
18+
}
19+
20+
public Region 유럽() {
21+
return regionFixtureBuilder.region()
22+
.code("EUROPE")
23+
.koreanName("유럽")
24+
.findOrCreate();
25+
}
26+
27+
public Region 아시아() {
28+
return regionFixtureBuilder.region()
29+
.code("ASIA")
30+
.koreanName("아시아")
31+
.findOrCreate();
32+
}
33+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.example.solidconnection.region.fixture;
2+
3+
import com.example.solidconnection.entity.Region;
4+
import com.example.solidconnection.region.repository.RegionRepositoryForTest;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.boot.test.context.TestComponent;
7+
8+
@TestComponent
9+
@RequiredArgsConstructor
10+
public class RegionFixtureBuilder {
11+
12+
private final RegionRepositoryForTest regionRepositoryForTest;
13+
14+
private String code;
15+
private String koreanName;
16+
17+
public RegionFixtureBuilder region() {
18+
return new RegionFixtureBuilder(regionRepositoryForTest);
19+
}
20+
21+
public RegionFixtureBuilder code(String code) {
22+
this.code = code;
23+
return this;
24+
}
25+
26+
public RegionFixtureBuilder koreanName(String koreanName) {
27+
this.koreanName = koreanName;
28+
return this;
29+
}
30+
31+
public Region findOrCreate() {
32+
return regionRepositoryForTest.findByCode(code)
33+
.orElseGet(() -> regionRepositoryForTest.save(new Region(code, koreanName)));
34+
}
35+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.example.solidconnection.region.repository;
2+
3+
import com.example.solidconnection.entity.Region;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
import java.util.Optional;
7+
8+
public interface RegionRepositoryForTest extends JpaRepository<Region, Long> {
9+
10+
Optional<Region> findByCode(String code);
11+
}

src/test/java/com/example/solidconnection/support/TestContainerSpringBootTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.junit.jupiter.api.extension.ExtendWith;
44
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
55
import org.springframework.boot.test.context.SpringBootTest;
6+
import org.springframework.context.annotation.ComponentScan;
67
import org.springframework.test.context.ContextConfiguration;
78
import org.testcontainers.junit.jupiter.Testcontainers;
89

@@ -11,6 +12,7 @@
1112
import java.lang.annotation.RetentionPolicy;
1213
import java.lang.annotation.Target;
1314

15+
@ComponentScan(basePackages = "com.example.solidconnection")
1416
@ExtendWith({DatabaseClearExtension.class})
1517
@ContextConfiguration(initializers = {RedisTestContainer.class, MySQLTestContainer.class})
1618
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.example.solidconnection.university.fixture;
2+
3+
import com.example.solidconnection.type.LanguageTestType;
4+
import com.example.solidconnection.university.domain.LanguageRequirement;
5+
import com.example.solidconnection.university.domain.UniversityInfoForApply;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.boot.test.context.TestComponent;
8+
9+
@TestComponent
10+
@RequiredArgsConstructor
11+
public class LanguageRequirementFixture {
12+
13+
private final LanguageRequirementFixtureBuilder languageRequirementFixtureBuilder;
14+
15+
public LanguageRequirement 토플_80(UniversityInfoForApply universityInfo) {
16+
return languageRequirementFixtureBuilder
17+
.languageTestType(LanguageTestType.TOEFL_IBT)
18+
.minScore("80")
19+
.universityInfoForApply(universityInfo)
20+
.create();
21+
}
22+
23+
public LanguageRequirement 토플_70(UniversityInfoForApply universityInfo) {
24+
return languageRequirementFixtureBuilder
25+
.languageTestType(LanguageTestType.TOEFL_IBT)
26+
.minScore("70")
27+
.universityInfoForApply(universityInfo)
28+
.create();
29+
}
30+
31+
public LanguageRequirement 토익_800(UniversityInfoForApply universityInfo) {
32+
return languageRequirementFixtureBuilder
33+
.languageTestType(LanguageTestType.TOEIC)
34+
.minScore("800")
35+
.universityInfoForApply(universityInfo)
36+
.create();
37+
}
38+
39+
public LanguageRequirement 토익_900(UniversityInfoForApply universityInfo) {
40+
return languageRequirementFixtureBuilder
41+
.languageTestType(LanguageTestType.TOEIC)
42+
.minScore("900")
43+
.universityInfoForApply(universityInfo)
44+
.create();
45+
}
46+
47+
public LanguageRequirement JLPT_N2(UniversityInfoForApply universityInfo) {
48+
return languageRequirementFixtureBuilder
49+
.languageTestType(LanguageTestType.JLPT)
50+
.minScore("N2")
51+
.universityInfoForApply(universityInfo)
52+
.create();
53+
}
54+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.example.solidconnection.university.fixture;
2+
3+
import com.example.solidconnection.type.LanguageTestType;
4+
import com.example.solidconnection.university.domain.LanguageRequirement;
5+
import com.example.solidconnection.university.domain.UniversityInfoForApply;
6+
import com.example.solidconnection.university.repository.LanguageRequirementRepository;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.boot.test.context.TestComponent;
9+
10+
@TestComponent
11+
@RequiredArgsConstructor
12+
public class LanguageRequirementFixtureBuilder {
13+
14+
private final LanguageRequirementRepository languageRequirementRepository;
15+
16+
private LanguageTestType languageTestType;
17+
private String minScore;
18+
private UniversityInfoForApply universityInfoForApply;
19+
20+
public LanguageRequirementFixtureBuilder languageTestType(LanguageTestType languageTestType) {
21+
this.languageTestType = languageTestType;
22+
return this;
23+
}
24+
25+
public LanguageRequirementFixtureBuilder minScore(String minScore) {
26+
this.minScore = minScore;
27+
return this;
28+
}
29+
30+
public LanguageRequirementFixtureBuilder universityInfoForApply(UniversityInfoForApply universityInfoForApply) {
31+
this.universityInfoForApply = universityInfoForApply;
32+
return this;
33+
}
34+
35+
public LanguageRequirement create() {
36+
LanguageRequirement languageRequirement = new LanguageRequirement(
37+
null,
38+
languageTestType,
39+
minScore,
40+
universityInfoForApply
41+
);
42+
universityInfoForApply.addLanguageRequirements(languageRequirement);
43+
return languageRequirementRepository.save(languageRequirement);
44+
}
45+
}

0 commit comments

Comments
 (0)