-
[kotlin][Mockito][Junit5] any() must not be null 에러 해결프로젝트/자프링 -> 코프링 마이그레이션 2022. 12. 5. 00:01
개요
기존의 Mockito를 활용하여 given절에 메서드의 인자로 any()를 활용했습니다.
any() must not be null
java.lang.NullPointerException: any() must not be nullany() 함수에서 null을 리턴하므로 에러가 발생합니다.
kotlin class는 final이기 때문에 mocking이 불가능하다고 합니다.
이때 any를 사용하면 발생하는 예외 -> 특정 타입으로 구체화해서 해결하였습니다.
예시) 인자가 String이기 때문에 String 특정 타입으로 구체화
ArgumentMatchers.anyString()
문제 발생
하지만 직접 만든 클래스의 경우에는 특정 타입으로 구체화하는게 불가능했습니다.
이때 별도의 라이브러리 추가없이 any() 함수를 재정의하여 해결합니다.
private fun <T> any(): T { Mockito.any<T>() return null as T }
Generic을 사용해서 Null Object를 클래스 객체로 변환합니다.
return null as T 만 반환하는데 Mockito.any()가 있을 필요가 있나 싶은데 없으면 에러가 발생합니다.
다음과 같이 given 절을 활용했습니다.
BDDMockito.given( memberService.join(any(MemberRequestDTO::class.java)) ).willThrow(IllegalArgumentException())
이외에도 mockito-kotlin 라이브러리를 사용하거나 kotest, mockk를 활용하는 방법을 사용할 수 있을 것 같습니다.
참고자료
https://withhamit.tistory.com/138
'프로젝트 > 자프링 -> 코프링 마이그레이션' 카테고리의 다른 글
build.gradle to build.gradle.kts (Groovy를 Kotlin으로 마이그레이션) (0) 2022.12.11 @SpringBootApplication 자바[Java] -> 코틀린[Kotlin]으로 변경 (0) 2022.12.06 Kotlin 각종 어노테이션 사용법(@Index, @Embeddable, @Size) (0) 2022.12.01 Kotlin과 Lombok 컴파일 에러 해결 (0) 2022.11.30 Kotlin + Junit 5 could not Autowire 이슈 (0) 2022.11.28