@MockK에서 null을 할당하는 이유?
133
投稿した質問数 1
37강 5분 11초에서 "처음에는 null로 되어있지만 값을 한 번 세팅할 수 있게 해주고 싶다."라고 하셨는데
처음부터 null을 할당하지 않으면 lateinit을 사용 안 할 수도 있는 거 아닌가요?
테스트코드에 대한 이해가 하나도 없어서 고른 강의인지라 질문의 깊이가 너무 없지만 답변주시면 감사합니다!!
回答 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() 헬퍼 함수를 더 선호하고 있습니다. 더 명시적이고 간단하거든요!
질문해주셔서 저도 설명을 더 명확히 할 수 있었네요. 감사합니다!
"폴더를 찾을 수 없습니다." 라는 응답만 계속 나옵니다.
0
2
0
EmailSender 관련 문의
0
5
1
실기 이론 통합 요약본 버전
0
7
1
업캐스팅 3번 문제 예시
0
18
2
CRA ? 질문입니다
0
16
1
[해결됨]마지막 강의 내용 수정 화면이 기능을 못하네요.
0
15
1
[해결됨]부분적으로 화면 이동이 안되는 부분이 있습니다.
0
16
6
구글드라이브 접속 불가
0
20
2
2024년2회15~20
0
21
1
8-2. 단항 연산자 중복 : 전위 ++ 연산자 작성 질문
0
29
1
낙관적락 질문있습니다.
0
40
1
push pop 설명 되어있는 강의가 몇강인가요?
0
42
1
해당 결제 부분을 포폴에서 테스트 api를 적용에 대한 궁금증
0
36
0
댓글순서부여방식
0
40
1
@RelaxedMockK로 모킹하고 save 함수를 왜 또 모킹하는지 모르겠습니다.
1
396
1
build.gradle.kts 변경시 오류가 발생합니다.
0
517
1
서비스, 컨트롤러 질문입니다.
0
401
2
실습. dto 변환해보기
1
390
1
실습. gradle update/script 강의 문의
1
383
2
IntelliJ IDEA 문의
1
297
1
PDF 안에 파일이 없습니다
1
428
2
강의교재 PDF
1
306
1
import 질문
1
374
2
안녕하세요 질문이 있습니다.
1
409
1

