val testLocalTime = LocalTime.of(9,0)
mockkStatic(LocalTime::class)
every { LocalTime.now() } returns testLocalTime
테스트코드를 짜던 도중 LocalTime을 모킹해야 할 일이 생겼다.
참고로 java11, kotlin, mockk을 사용한 코드다.
테스트 코드를 돌려보면 에러가 뜬다.
Caused by: java.lang.reflect.InaccessibleObjectException
구글링 해보니
https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-12F945EB-71D6-46AF-8C3D-D354FD0B1781
Java Platform, Standard Edition Oracle JDK 9 Migration Guide, Release 9
This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may
docs.oracle.com
이렇다고 한다.
테스트 코드를 돌릴 때만
--add-opens=java.base/java.time=ALL-UNNAMED
옵션을 넣어줘야겠다.
build.gradle.kts에 추가
tasks.withType<Test>().all {
jvmArgs("--add-opens=java.base/java.time=ALL-UNNAMED")
}
추가적으로,
LocalDateTime, Random등 외부에서 컨트롤 할 수 없는 값들은 함수 외부에서 주입받아서 사용하도록 해야 테스트 코드를 짤 때 좋은 설계라고 한다. 그런데 테스트 코드 상에서 위 값들을 컨트롤할 수 있다면 굳이 외부에서 주입받을 필요가 있을까 싶기도 하다.
'Tips > Errors' 카테고리의 다른 글
[JPA] @OneToMany 자식이 삭제되지 않는다 (0) | 2022.07.18 |
---|---|
Gradle multi project 특정 dependency 제외 안 됨 (1) | 2022.03.14 |
[STS][eclipse] SpringBoot에 ansi콘솔로 인한 렉/ 콘솔 렉 (0) | 2021.07.30 |
[svelte template clone][ 'degit@latest' ] 설치가 오류 코드 7로 실패했습니다 (0) | 2021.07.27 |
오라클 디벨로퍼 실행 안 될 때. 안 켜질 때. (1) | 2020.12.11 |