inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코틀린 문법부터 실무까지 (실전 자바->코틀린 변환)

실습 - 코틀린 테스트코드 - 모킹

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

120

apim

작성한 질문수 1

1

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

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

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

java spring kotlin spring-boot 객체지향

답변 1

0

양세열

안녕하세요 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() 헬퍼 함수를 더 선호하고 있습니다. 더 명시적이고 간단하거든요!

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

해당 프로젝트를 똑같이 따라하려니 spring installer가 버전이 17부터 가능하네요.

0

5

1

Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.

0

7

2

장치 의존성과 CSR

0

7

0

테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.

0

6

1

혹시 강의 내용하면서 실습했던 것을 개인 깃에다 올려도 될까요?

0

9

1

아무도 모르게 책 내시면 모르실 줄 알고!!

1

28

2

[영한님]Spring Boot 및 프로젝트 생성

0

16

1

Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면

1

41

1

리뉴얼 시기

0

12

1

스크립트에 대해 질문 있습니다.

1

34

1

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

2

28

1

조건 검색 질문

0

26

1

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

41

3

강의 요청 문의

0

34

2

@RelaxedMockK로 모킹하고 save 함수를 왜 또 모킹하는지 모르겠습니다.

1

380

1

build.gradle.kts 변경시 오류가 발생합니다.

0

505

1

서비스, 컨트롤러 질문입니다.

0

388

2

실습. dto 변환해보기

1

377

1

실습. gradle update/script 강의 문의

1

367

2

IntelliJ IDEA 문의

1

287

1

PDF 안에 파일이 없습니다

1

414

2

강의교재 PDF

1

295

1

import 질문

1

357

2

안녕하세요 질문이 있습니다.

1

385

1