320x100
@SpringBootTest class MemberSpeckTest extends Specification { @Autowired MemberService memberService def "getProfileByMemberId() Test"() { given: def profileService = Mock(ProfileService.class) profileService.getProfileByMemberId(0) >> new ProfileResponse(name: "햄과함께") // error // ... } } | cs |
위와 같이 groovy 언어로 테스트 코드를 짰다.
data class ProfileResponse( val name: String = "", val age: Int = 0 ) | cs |
ProfileResponse는 위와 같다.
groovy.lang.ReadOnlyPropertyException: Cannot set readonly property: name for class: ~~ProfileResponse at ~~MemberSpecTest.getProfileByMemberId() Test(MemberSpecTest.groovy:xx) | cs |
테스트를 돌려보면 ReadOnlyPropertyException 에러가 발생한다.
Cannot set readonly property
ProfileResponse에서 파라미터가 val이여서 위 에러가 발생한 것이다.
파라미터를 var로 바꾸면 제대로 돌아가지만 테스트 코드를 돌리기 위해 val -> var로 변환하는건 아닌 것 같아서 다른 방법을 찾아보기로 했다.
profileService.getProfileByMemberId(0) >> new ProfileResponse("햄과함께", 0) | cs |
위와 같이 파라미터를 이름을 선언해서 쓰지 않으면 제대로 돌아갔다.
좀 더 상세한건 더 찾아봐야 알겠지만 추측으로는 파라미터 이름을 지정하면서 생성자를 호출하면 setter로 값이 세팅되는 것 같다.
320x100
'Back-End (web)' 카테고리의 다른 글
[Kotlin] Class<T>에 List<Int> 넣기 (0) | 2019.03.15 |
---|---|
[Kotlin][Mockito] IllegalStateException 에러 (2) | 2019.03.05 |
[Error][WebClient] UnsupportedMediaTypeException (0) | 2019.02.26 |
[Webpack][Error] custom keyword definition is invalid (0) | 2019.02.16 |
[SpringBoot] use requestFactory in RestTemplateBuilder (0) | 2019.01.31 |
댓글