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

dsdsd님의 프로필 이미지
dsdsd

작성한 질문수

스프링 웹 MVC

도메인 클래스 컨버터

질문있습니다.

작성

·

529

1

강의를 보고 소스를 똑같이 입력하였는데요.

테스트 결과값이 다르게 나오게되어 문의드립니다.

java.lang.AssertionError: Response content expected:<hello keesun> but was:<hello 1>

Expected :hello keesun

Actual   :hello 1

break point를 찍고 person객체와 savedPerson객체가 동일한 값이 들어있는걸 확인하였습니다.

컨버터가 동작을 안한건지

테스트 결과값을 toString을 찍어보면 id=null, name='1'로 나옵니다.

뭐가 문제인건가요?..ㅠ

테스트 코드도 첨부해드립니다.

@SpringBootTest
@AutoConfigureMockMvc
public class SampleControllerTest {

@Autowired
MockMvc mockMvc;

@Autowired
PersonRepository personRepository;

@Test
public void hello() throws Exception {
Person person = new Person();
person.setName("keesun");
Person savedPerson = personRepository.save(person);

this.mockMvc.perform(get("/hello")
.param("id", savedPerson.getId().toString()))
.andDo(print())
.andExpect(content().string("hello keesun"));
}

}

답변 6

1

백기선님의 프로필 이미지
백기선
지식공유자

코드를 보니까 포매터를 만들어 두셨네요. 그게 id로 들어오는 문자열을 Person으로 바이딩할 때 해당 포매터가 사용되서 그렇습니다. 그걸 빈으로 등록하지 마시고 테스트 실행하면 잘 될겁니다.

0

dsdsd님의 프로필 이미지
dsdsd
질문자

감사합니다.해결되었습니다.

0

dsdsd님의 프로필 이미지
dsdsd
질문자

https://github.com/0hun/spring-demo-web

소스 깃헙에 올렸습니다.

0

백기선님의 프로필 이미지
백기선
지식공유자

아.. name에 1이 들어갔네요? 프로젝트 전체 코드를 깃헙에 올려서 공유해 주세요. 

이상하네요. 이 코드를 보면 name에 keesun을 넣었는데 어떻게 1이 들어가있는건지... 

        Person person = new Person();
person.setName("keesun");
Person savedPerson = personRepository.save(person);

0

dsdsd님의 프로필 이미지
dsdsd
질문자

person의 name을 리턴한것을 확인하였습니다.

@RestController
public class SampleController {

@GetMapping("/hello")
public String hello(@RequestParam("id") Person person) {
return "hello " + person.getName();
}

}

0

백기선님의 프로필 이미지
백기선
지식공유자

컨트롤러에서 Persion의 id를 리턴하고 있는거 아닌가요? 수업 영상 다시 참고해 주시기 바랍니다.

dsdsd님의 프로필 이미지
dsdsd

작성한 질문수

질문하기