인프런 커뮤니티 질문&답변

Rain D님의 프로필 이미지

작성한 질문수

스프링 프레임워크는 내 손에 [스프2탄]

08_스프2탄_JUnit리스트보기 Controller 테스트

안녕하세요. spring boot 에서 하는중인데 질문 드립니다.!

작성

·

183

0

 spring boot 로 프로젝트 만들고 하는중이라서 부트에서 테스트 하고 있는데요.

 

구글링 해서 테스트 세팅하고 modelAndView 까지 했는데

 

view 값은 가져오는데 model 값이 안가져와지네요....

 

@MockBean 으로 Service 를 bean 등록 시키고 Service 에서 getList 할때 뭔가 잘안되는거 같은데

혹시 어떤게 잘못됬는지 확인 가능하신가요 ??

 

Controller

스크린샷 2024-04-10 205918.png

Service test

스크린샷 2024-04-10 205909.png

Controller test

스크린샷 2024-04-10 205705.png

Constroller test 결과

스크린샷 2024-04-10 205714.png

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

RainD님, Spring Boot로 MVC 테스트를 하시는 과정에서 @MockBean을 사용해 서비스 레이어를 모킹하고, 컨트롤러에서 모델 값을 제대로 가져오지 못하는 문제를 경험하고 계시군요.

해당 문제는 @MockBean으로 등록된 BoardServicegetList() 메서드에 대한 동작을 명시적으로 정의하지 않아서 발생할 수 있습니다. @MockBean을 사용할 때, 해당 빈(Bean)의 실제 로직은 실행되지 않고 모의 객체(Mock Object)로 대체되므로, 테스트 중에 해당 메서드의 기대하는 반환 값을 명시적으로 정의해주어야 합니다.

예를 들어, BoardControllerTest에서 MockMvc를 사용해 컨트롤러를 테스트하는 경우, @BeforeEach를 사용하여 테스트가 실행되기 전에 BoardServicegetList() 메서드가 호출될 때 원하는 객체 리스트를 반환하도록 설정할 수 있습니다.

Java 코드 예시:

@BeforeEach
void setUp() {
    List<Board> mockList = Arrays.asList(new Board(...), new Board(...));
    given(boardService.getList()).willReturn(mockList);
}

이렇게 설정하면 BoardControllergetList() 메서드를 통해 /board/list 경로에 대한 요청이 들어왔을 때, mockList에 정의된 리스트가 모델에 추가되어 뷰에 전달됩니다.

테스트 클래스에서 위와 같이 @MockBean으로 정의된 빈의 동작을 명시적으로 설정해보시기 바랍니다. 이를 통해 모델이 예상대로 잘 전달되는지 확인하실 수 있을 것입니다.

추가적으로, 모델 값이 잘 전달되지 않는 것과 관련된 상세한 로그나 오류 메시지가 있다면, 해당 내용을 확인하여 더 정확한 원인을 파악할 수 있습니다.

Rain D님의 프로필 이미지

작성한 질문수

질문하기