CertificationServiceTest
51
3 câu hỏi đã được viết
16. 외부 연동을 다루는 방법
15:10
then에서 content에 certificationService.generateCertificationUrl를 사용하지 않고 평문을 사용한 이유가 있을까요?
Câu trả lời 1
0
안녕하세요, 인프런 AI 인턴입니다.
thrkrif님, then에서 certificationService.generateCertificationUrl()을 호출하지 않고 평문을 사용한 이유는 테스트의 기대값을 실제 구현과 분리하기 위해서입니다.
예를 들어 다음처럼 테스트하면,
// given
String expectedUrl = "https://example.com/certification/123";
// when
String content = certificationService.createContent(certification);
// then
assertThat(content).contains(expectedUrl);
테스트 대상 메서드 내부에서 URL을 생성하는 로직이 잘못되어도, then에서 같은 generateCertificationUrl()을 호출하면 동일한 잘못된 결과를 기대값으로 사용하게 될 수 있습니다.
// 좋지 않은 예
assertThat(content)
.contains(certificationService.generateCertificationUrl(certification));
이 경우 실제 결과와 기대값이 같은 구현에 의존하므로 테스트가 구현 오류를 발견하지 못할 가능성이 있습니다.
따라서 then에서는 사람이 검증한 고정된 값이나 명확한 테스트 데이터를 사용하여, 결과가 정확히 생성되었는지 확인하는 것이 일반적입니다.
다만 URL 생성 로직 자체가 외부 의존성이거나 별도의 협력 객체라면 다음처럼 목 객체의 반환값을 미리 지정할 수 있습니다.
given(urlGenerator.generate(certification))
.willReturn("https://example.com/certification/123");
String content = certificationService.createContent(certification);
assertThat(content)
.contains("https://example.com/certification/123");
즉, generateCertificationUrl() 자체를 테스트하는 테스트에서는 그 메서드의 결과를 검증하고, 다른 기능의 테스트에서는 해당 메서드를 다시 호출하지 않고 기대값을 직접 작성하는 것이 테스트의 독립성과 신뢰성을 높이는 방법입니다.
참고 문서: Spring Boot Testing
Post, PostEntity에서 User, UserEntity 의존
0
52
1
UserService, CertificationService 책임 분리 기준 질문
0
75
1
service.port 패키지로 이동한 UserRepository가 infrastructure에 있는 UserEntity에 의존
0
105
1
Service 소형 테스트 질문
0
138
1
조회 시 엔티티를 조회하는 것이 아닌QueryDSL을 많이 사용 시 Dto는 어떻게 하나요?
0
169
1
controller 의 port 패키지의 service 인터페이스 사용
0
114
1
빌드 문제
0
130
1
빌드 안 되시는 분들 참고
0
159
1
update에서 Repository.save
0
137
1
최종 완성된 코드를 받아 볼 수 있을까요?
0
196
1
의존성 역전으로 해결한 외부의존성?
0
202
1
좋은 설계
0
220
1
Controller에 테스트
0
173
1
JPA가 아닌 Mapper 아키텍처 기반 테스트 코드 작성
0
271
0
영속성 객체 구분으로 인한 JPA와 Querydsl의 Projection 사용
0
249
1
인프라계층 구현체와 테스트 구현체에 대한 질문
0
260
1
실습 코드 커밋
0
409
1
UserEntity 메서드
0
331
2
CertificationServiceTest에서 MailSender 인터페이스가 아닌 FakeMailSender를 이용하는 것
0
257
1
레이어드 아키텍처 개발에 대하여
0
261
1
BDDMockito의 when을 사용한 코드가 given 절에 있는 이유가 궁금합니다.
0
264
1
테스트에서 주입과 생성
0
240
1
프로젝트 코드는 제공해주시지 않는건가요?
0
426
2
개선된 아키텍처의 구조
0
308
1

