반응형 Blog135 2025-01-22 (수) every { ... } 블록 내에서 사용된 객체가 mockk()로 생성된 객체가 아닐 때 발생every { KeyGenerator.next() } returns base.projectIdMissing mocked calls inside every { ... } block: make sure the object inside the block is a mockio.mockk.MockKException: Missing mocked calls inside every { ... } block: make sure the object inside the block is a mockKetGenerator.next() 가 정적 메서드라면 mockkStatic(KeyGenerator::class) 를 호출해야 함.중요 .. 2025. 1. 22. 2025-01-21 (화) Controller WebMvcTest IssueKotlin 진행@WebMvcTest(BusinessUserController::class) class AuthAnnotationTest @Autowired constructor( private val mockMvc: MockMvc ) : DescribeSpec({런타임 에러 발생 (일부 코드)Kotest 는 테스트 클래스를 인스턴스화 할 때 기본 생성자를 필요로 함.현재 AuthAnnotationTest 클래스의 생성자는 @Autowired constructor(mockMvc: MockMvc) 형태로 매개변수를 받고 있기 때문에 Kotest 에서 인스턴스를 생성할 수 없음.Warning: Kotest autoscan is enabled. This.. 2025. 1. 21. 2025-01-20 (월) 제네릭Generic 은 코드의 타입을 미리 지정하지 않고, 사용하는 시점에 타입을 결정하는 기능이다.타입 안정성 유지 및 유연한 재사용이 가능한 코드 작성 가능.제네릭을 사용할 경우O 가 정확한 객체 타입을 가지도록 강제할 수 있음.T 가 필드의 타입과 일치해야만 하도록 강제할 수 있음.컴파일 타입에서 타입 검증이 가능해 런타임 오류를 최소화함.예제obj 가 어떤 타입의 객체인지 알 수 없고, value 가 필드 타입과 일치하는지 보장할 수 없음.잘못된 타입이 들어와도 컴파일러가 체크하지 못하고, 런타임에서만 오류가 발생.제네릭을 사용하면, obj 와 value 가 올바른 타입인지 컴파일 시점에 확인할 수 있음.fun setPrivateField(obj: Any, fieldName: String, val.. 2025. 1. 20. 2025-01-16 (목) MutableList, mutableListOf()변경 가능한 리스트를 다룰 때 사용.MutableList인터페이스이므로, 자체적으로 객체를 생성할 수 없으며, 이를 구현한 클래스나 함수를 통해 인스턴스를 생성해야 함.add, remove, clear 등과 같은 수정 작업 지원.val list: MutableList = mutableListOf("a", "b", "c")list.add("d") // "d" 추가list.remove("b") // "b" 제거println(list) // [a, c, d]mutableListOf()인터페이스를 구현한 리스트 객체를 생성하는 함수.인스턴스 생성 시 요소를 초기값으로 바로 전달할 수 있음.val list = mutableListOf("a", "b", "c") /.. 2025. 1. 16. 2025-01-15 (수) firstOrNullKotlin 컬렉션에서 사용되는 함수.조건에 맞는 첫 번째 요소 반환 or 조건에 맞는 요소가 없을 경우 null 반환.Predicate 사용 가능: 람다를 전달하여 조건을 지정할 수 있음.후속 처리를 위해 널 체크나 엘비스 연산자 (?:) 를 사용할 수 있음.조건 없이 사용val list = listOf(1, 2, 3)val first = list.firstOrNull()println(first) // 출력: 1val emptyList = emptyList()val emptyFirst = emptyList.firstOrNull()println(emptyFirst) // 출력: null2. 조건과 함께 사용```kotlinval list = listOf(1, 2, 3, 4)val ev.. 2025. 1. 15. 2025-01-14 (화) sealed classsealed class 를 사용하여 하위 클래스의 유형을 제한하고, 안전하고 명확하게 관리하려는 목적.상속 가능한 클래스 계층을 제한할 때 사용함.특징제한된 상속: sealed class 를 상속할 수 있는 클래스는 같은 파일 내에서만 정의될 수 있다.when 문에서 모든 하위 클래스를 컴파일 시점에 확인할 수 있어 안전한 타입 검사가 가능하다.@HiddenOpenAPI(Swagger) 에서 해당 필드를 문서화하지 않고 숨기기 위해 사용함.비즈니스 로직에서 사용되지만 API 사용자에게 노출할 필요가 없는 내부 구현 세부 사항인 경우 어노테이션을 사용해 숨김.@JsonIgnoreJackson 라이브러리가 해당 필드를 JSON 직렬화/역직렬화 과정에서 무시하도록 함.API 요청 또는 응.. 2025. 1. 14. 2025-01-13 (월) describe("~") { context("~") { it("~") { val advertiserResponse = List(3) { index -> AdvertiserInfoDTO.Response( "${base.advertiserName}$index", "${base.advertiserId}${index + 1}" ) } every { innerRestClient.get() .uri("...") .. 2025. 1. 13. 2025-01-10 (금) 스코프 함수.run: 객체에서 특정 작업을 실행하고 마지막 표현식의 결과 반환.주로 객체에 대해 임시로 스코프를 확장하여 작업을 수행하거나 체이닝을 간결하게 하기 위해서 사용됨.?. 연산자로 null-safe하게 작업을 수행.inline fun T.run(block: T.() -> R): RT: 호출 객체의 타입.block: 호출 객체를 수신으로 받아 작업을 수행할 람다.R: 람다의 결과 타입으로, .run 함수가 반환됨.함수this로 접근it로 접근반환 값주 용도runOX람다의 결과객체 설정 및 결과 반환letXO람다의 결과결과 반환 및 체이닝alsoOX호출 객체추가 작업 수행 및 체이닝applyOX호출 객체객체 구성 및 반환withOX람다의 결과객체 작업에 집중다수 테스트 객체 생성val email.. 2025. 1. 10. 2025-01-09 (목) 순환 참조(circular dependency) 문제java.lang.ClassCircularityError: java/lang/WeakPairMap$ Pair $Weak주요 원인Mocking 문제: 동적으로 생성된 프록시 객체가 내부적으로 순환 참조를 발생시킬 수 있음.모든 mock 객체를 테스트 클래스 상단에서 일괄적으로 초기화.코틀린 리플렉션이나 클래스 로딩 과정에서의 문제일 수 있음.비활성화```bashDkotlinx.coroutines.debug.enable.creation.stack.trace=falseDkotest.framework.classpath.scanning.autoscan.disable=true```JVM 버전(corretto-17) 또는 설정이 특정 라이브러리와 호환되지 않아 발생.. 2025. 1. 9. 이전 1 2 3 4 5 6 7 ··· 15 다음 728x90 반응형