본문 바로가기
Back-End (web)

[spock] Kotlin테스트 ReadOnlyPropertyException error

by 햄과함께 2019. 3. 5.
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

댓글