강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của apim1833
apim1833

câu hỏi đã được viết

Từ ngữ pháp Kotlin đến thực hành (chuyển đổi Java thực tế sang Kotlin)

Thực hành - Mã kiểm tra Kotlin - mô phỏng

@MockK에서 null을 할당하는 이유?

Viết

·

71

1

37강 5분 11초에서 "처음에는 null로 되어있지만 값을 한 번 세팅할 수 있게 해주고 싶다."라고 하셨는데

처음부터 null을 할당하지 않으면 lateinit을 사용 안 할 수도 있는 거 아닌가요?

테스트코드에 대한 이해가 하나도 없어서 고른 강의인지라 질문의 깊이가 너무 없지만 답변주시면 감사합니다!!

javaspringkotlinspring-boot객체지향

Câu trả lời 1

0

seyol님의 프로필 이미지
seyol
Người chia sẻ kiến thức

안녕하세요 apim님! 질문 감사드립니다😃

제가 빠르게 설명을 하다보니 다소 모호하게 설명을 하고 넘어간 것 같아요.

 

핵심은 이렇습니다:

@MockK 어노테이션은 테스트 실행 시점에 MockK 프레임워크가 mock 객체를 생성해서 주입해줍니다. 하지만 val 타입 변수에 = null로 값을 미리 할당해두면, MockK가 나중에 그 값을 바꿀 수 없어서 제대로 동작하지 않게 됩니다.

lateinit var로 바꿔주면 "지금은 값이 없지만 나중에 할당될 것"이라고 컴파일러에게 알려주는 것이죠. 제가 "처음에는 null로 되어있지만 값을 한 번 세팅할 수 있게 해주고 싶다"고 표현한 것이 바로 이 의미입니다.

원래는 init { } 블럭에서 lateinit var 변수를 초기화해야 하는데, @MockK가 클래스 생성 시 자동으로 초기화를 수행해줍니다.

 

참고로 말씀하신 대로 @MockK 어노테이션 없이 직접 생성하는 방식도 좋습니다:

val princeRepository: PrinceRepository = mockk() 

val woundedPrinceRepository: WoundedPrinceRepository = mockk() 

val princeMakerService: PrinceMakerService = 

PrinceMakerService(princeRepository, woundedPrinceRepository)

저도 과거에는 Mockito 스타일과 비슷하게 하려고 어노테이션을 사용했지만, 현재는 위처럼 mockk() 헬퍼 함수를 더 선호하고 있습니다. 더 명시적이고 간단하거든요!

질문해주셔서 저도 설명을 더 명확히 할 수 있었네요. 감사합니다!

Hình ảnh hồ sơ của apim1833
apim1833

câu hỏi đã được viết

Đặt câu hỏi