작성
·
242
·
수정됨
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
CONDITIONS EVALUATION REPORT 라고 에러메시지가 뜨면서 서비스통합테스트가 뜨는데 그럴땐 어디를 봐야 하나요? 서비스테스트랑 코드문은 똑같습니다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.1'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'hhdplus'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
runtimeOnly 'com.mysql:mysql-connector-j'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl'
}
tasks.named('test') {
useJUnitPlatform()
}
package hhdplus.hhplus_tdd2.service;
import hhdplus.hhplus_tdd2.domain.reserve.Reserve;
import hhdplus.hhplus_tdd2.domain.reserve.ReserveCommand;
import hhdplus.hhplus_tdd2.domain.reserve.ReserveInfo;
import hhdplus.hhplus_tdd2.domain.reserve.ReserveService;
import hhdplus.hhplus_tdd2.infra.reserve.ReserveRepository;
import hhdplus.hhplus_tdd2.interfaces.controller.ReserveRequest;
import hhdplus.hhplus_tdd2.interfaces.controller.ReserveResponse;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@SpringBootTest
//@ExtendWith(MockitoExtension.class)
public class ReserveServiceIntergrationTest {
@Autowired
ReserveService reserveService;
@Autowired
ReserveRepository reserveRepository;
ReserveRequest reserveRequest = new ReserveRequest();
ReserveResponse reserveResponse = new ReserveResponse();
Reserve reserve = new Reserve();
//동작하기 전에 넣어준다 BeforeEach
// @BeforeEach
// public void beforeEach() {
// MockitoAnnotations.openMocks(this); // Mock 객체 초기화
// }
//
// @AfterEach //테스트 돌때마다 초기화
// public void afterEach() {
// Mockito.reset(reserveRepository); // Mock 상태 초기화
// }
@Test
void 아이디별_예약_내역() {
//given 뭔가가 주어졌는데
int userId = 1;
ReserveInfo mockReserveInfo = new ReserveInfo();
mockReserveInfo.setId(1);
mockReserveInfo.setUserId(userId);
mockReserveInfo.setName("테스트 예약 정보");
List<ReserveInfo> mockReserveList = List.of(mockReserveInfo);
// Mock 동작 설정
when(reserveService.findReservation(1)).thenReturn(mockReserveList);
//when 이거를 실행했을 떄
List<ReserveInfo> result = reserveService.findReservation(userId);
//then 결과가 이게 나와야 돼
if(result != null){
System.out.println("이름 : " + mockReserveInfo.getName());
}
assertThat(result).isNotNull();
assertThat(result.size()).isEqualTo(1);
assertThat(result.get(0).getUserId()).isEqualTo(userId);
}
@Test
void 예약하기() {//40명이 예약 한다 쳐보면 30명만 예약이 되게끔 해보기
//given 뭔가가 주어졌는데
ReserveResponse reserveResponse = new ReserveResponse();
reserveResponse.setId(1);
reserveResponse.setUserId(1);
reserveResponse.setLectureId(1);
//when 이거를 실행했을 떄
ReserveRequest findOne = reserveService.findOne(reserveResponse.getUserId());
findOne.setUserId(1);
findOne.setLectureId(1);
// Mock 동작 설정
when(reserveService.insertReservation(reserveResponse)).thenReturn(findOne);
ReserveRequest result = reserveService.insertReservation(reserveResponse);
//then 결과가 이게 나와야 돼
if(findOne != null){
System.out.println("findOne : " + reserveResponse.getLectureId());
}
assertThat(reserveResponse.getLectureId()).isEqualTo(1);
assertThat(result.getLectureId()).isEqualTo(1);
}
@Test
void 예약수정() {
//given 뭔가가 주어졌는데
ReserveCommand reserveCommand = new ReserveCommand();
reserveCommand.setLectureId(1);
reserveCommand.setId(1);
reserveCommand.setId(1);
//when 이거를 실행했을 때
when(reserveService.modifyReservation(reserveCommand.getUserId())).thenReturn(reserveCommand);
ReserveRequest findOne = reserveService.findOne(reserveCommand.getUserId());
//then 결과가 이게 나와야 돼
assertThat(findOne).isNotNull();
if(findOne != null){
System.out.println("findOne : " + reserveResponse.getLectureId());
}
}
@Test
void 예약삭제() {
//given 뭔가가 주어졌는데
ReserveResponse reserveResponse = new ReserveResponse();
reserveResponse.setId(1);
reserveResponse.setUserId(1);
reserveService.deleteReservation(reserveResponse.getId());
//when 이거를 실행했을 때
List<ReserveInfo> list = reserveService.findReservation(reserveResponse.getUserId());
//then 결과가 이게 나와야 돼
if(list.isEmpty()){
System.out.println("삭제 완료");
}
assertThat(list.size()).isEqualTo(0);
}
}
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
sh hyeogi365님, 통합 테스트 중 “Conditions Evaluation Report” 오류 메시지가 발생하는 경우에는 여러 가지 원인이 있을 수 있습니다. 이 문제를 해결하기 위해서는 몇 가지 중요한 사항들을 확인해볼 필요가 있습니다.
프로파일 설정: 스프링 부트 테스트에서 사용하는 프로파일이 잘못 설정됐을 수 있습니다. 올바른 application.yml
이나 application.properties
내의 설정을 확인해 보세요. 테스트 환경에서는 특별히 application-test.yml
을 사용하는 경우가 많으니 확인해보세요.
Bean 정의 확인: 테스트 실행 시 필요한 Bean이 누락되었을 수 있습니다. 예를 들어 ReserveService
가 제대로 스프링 컨텍스트에 로드되고 있는지 확인이 필요합니다. @MockBean
이나 실제 구현체가 주입되는지 확인해 보시기 바랍니다.
의존성 문제: build.gradle
에서 필요한 모든 의존성이 잘 포함되어 있는지 확인하세요. 특히 데이터베이스 연결을 위한 드라이버 및 JPA 관련 의존성이 누락되지 않았는지 점검해야 합니다.
Mock 설정: when(reserveService.findReservation(1))
와 같은 Mock 설정이 올바르게 작동하고 있는지 확인합니다. 필요하다면 MockitoAnnotations.openMocks(this)
와 같은 방식으로 Mock을 초기화해보세요.
환경 설정: @SpringBootTest
를 사용하고 있는 경우, 통합 테스트로 실제 애플리케이션 컨텍스트에 의존하기 때문에, 종속된 환경 설정이 필요합니다. 즉, 해당 configuration들이 올바르게 세팅되어 있어야 합니다.
문제의 더 구체적인 부분을 해결하려면 위의 요소들을 중심으로 로그 메시지를 분석하고 환경 설정을 확인하여 종합적인 접근을 시도하는 것이 좋습니다. 추가로 확인이 필요하거나 코드상의 다른 의문점이 있으면 언제든지 말씀해 주세요.
문제 해결에 도움이 되셨길 바랍니다!