[Java/Kotlin] Final 클래스 Mocking 하기

Intro 코틀린을 사용한 프로젝트에서 Mockito를 사용해서 테스트 코드를 작성했는데 아래와 같은 에러가 나며 코드가 동작하지 않았다. Cannot mock/spy class com.tistory.shanepark.dutypark.security.domain.dto.LoginMember Mockito cannot mock/spy because : - final class org.mockito.exceptions.base.MockitoException: Cannot mock/spy class com.tistory.shanepark.dutypark.security.domain.dto.LoginMember Mockito cannot mock/spy because : - final class at app//..

Programming/Kotlin 2023.05.22
Gradle-Kotlin 멀티모듈 생성하기

Intro 프로젝트를 진행하다보면 분리에 대한 고민이 드는 시점이 종종 있습니다. 당장 필요해서 열심히 구현하고보니 다른 프로젝트에서도 자주 쓰일 것 같을 때도 있고, 다른프로젝트에서 여기에 있는 기능을 가져다 쓰려고 하는데 전부 포함시키기에는 불필요한 의존성이 너무 많을 때도 있습니다. 가장 쉬운 방법은 Copy And Paste(CNP방법론) 이 있겠지만, 그렇게 복사해낸 코드에 변경사항이라도 필요하면 일일히 복사된곳을 찾아가서 하나하나 고쳐줘야 하는 번거로움이 있습니다. DRY(Don't Repeat Yourself) 원칙을 위배하면 나중에 수습하기가 참 고생입니다. 특히, 서로간 통신이 빈번해 동일한 도메인을 공유해야하는 프로젝트간에는 이 공통된 객체간의 동기화가 보장되는게 정말 중요합니다..

Programming/Kotlin 2023.03.18
[Kotlin] 코틀린에서 JPA사용하기. LAZY 로딩이 의도대로 작동 하지 않는다면..

Intro 얼마전 코틀린으로 진행중인 토이프로젝트에서 응답속도가 생각만큼 나오지 않기에 쿼리 나가는걸 하나하나 확인 해 보았습니다. 그랬더니 분명 LAZY로 되어있는 여러가지 연관관계들이, 따로 사용하는 곳도 없는데 전부 다 하나씩 Eager Fetch 처럼 불러지는게 확인 되었습니다. 코틀린에서 JPA를 사용하다보면 자바와는 다른 코틀린의 설계로 인해 의도치 않은 문제가 많이 발생 할 수 있는데요. 어떤 문제가 있었는지, 그리고 LAZY 로딩이 의도대로 작동하게끔 하려면 어떻게 해야 하는지에 대해 알아보겠습니다. 필요시 모든 예제 코드는 https://github.com/Shane-Park/helloKotlin/tree/master/jpatest 에서 확인 하실 수 있습니다. 예제 코드 프로젝트 생성 ..

Programming/Kotlin 2022.12.05
[Kotlin] Spring Rest Docs 적용하기 build.gradle.kts

Intro 안녕하세요. 이번에 토이 프로젝트로 진행 중인 코틀린 프로젝트에 Spring REST Docs 를 도입을 해 보았습니다. 회사에서는 모든 프로젝트가 메이븐으로 되어 있고, gradle 도 학습용으로만 사용해 보았기 때문에 다루는 방법을 아직은 잘 알지 못하는 상황인데 그와중에 코틀린 DSL 까지 사용하려니 레퍼런스도 충분하지 않아 굉장히 힘들었습니다. 기본적으로 Spring REST Docs 공식 레퍼런스의 안내를 따르고 막히는 부분들에서는 Kotlin DSL 을 사용한 다른 프로젝트들을 찾아 비교해보며 간신히 API 페이지를 띄우는데 성공 했는데, 그 과정을 공유해보겠습니다. 저처럼 Kotlin 프로젝트에서 Spring Rest Docs 도입에 어려움을 겪는 분들에게 도움이 되었으면 합니다...

Programming/Kotlin 2022.10.01
[Kotlin] 코틀린에서 Mockito 사용시 final class 문제 해결

Intro 코틀린으로 코드를 작성하다보면 간혹가다가, 자바에서는 별 문제 없던게 의도대로 동작하지 않을 때가 있습니다. 이번에는 테스트 코드를 작성하다가 스터빙을 하려고 하는데 문제가 있었는데요, 아래와같이 테스트를 하려고 했습니다. // When val memberContext = Mockito.mock(MemberContext::class.java) Mockito.`when`(memberContext.member).thenReturn(member) quizService.edit(memberContext, quiz.id!!, quizEditDto) // Then val findById = quizService.findById(quiz.id!!) assertThat(findById.description)..

Programming/Kotlin 2022.09.25