728x90
반응형
순환 참조(circular dependency) 문제
java.lang.ClassCircularityError: java/lang/WeakPairMap$ Pair $Weak
주요 원인
Mocking 문제: 동적으로 생성된 프록시 객체가 내부적으로 순환 참조를 발생시킬 수 있음.
- 모든 mock 객체를 테스트 클래스 상단에서 일괄적으로 초기화.
코틀린 리플렉션이나 클래스 로딩 과정에서의 문제일 수 있음.
- 비활성화
```bash
- 비활성화
Dkotlinx.coroutines.debug.enable.creation.stack.trace=false
Dkotest.framework.classpath.scanning.autoscan.disable=true
```JVM 버전(corretto-17) 또는 설정이 특정 라이브러리와 호환되지 않아 발생할 수 있음.
- JVM 옵션 조정 -
idea64.exe.vmoptions
파일에 하단 내용 추가
```ruby
- JVM 옵션 조정 -
XX:+UnlockDiagnosticVMOptions
XX:+TraceClassLoading
XX:+TraceClassLoadingPreorder
XX:+DebugNonSafepoints
```타입 불일치 문제
java.lang.ClassCaseException
- 타입의 반환값과 예상되는 타입 간의 불일치에서 발생함.
- Hibernate 프록시 객체 문제
@ManyToOne(fetch = FetchType.LAZY)
로 설정된 경우,businessUserAuth.getBusiness()
호출 시 Hibernate는 실제Business
객체 대신 프록시 객체를 반환함.- 프록시 객체는 실제 클래스와 다른 동적 클래스일 수 있음.
- Mockk와 Hibernate 프록시 충돌.
mocking 을 세부적으로 진행해야 오류 없이 동작함.
context("승인된 비즈니스인 경우") { it("헤더 쿠키 설정 및 BusinessAuthDTO.Response 객체 반환") { val approveYnBusiness = TestDataFactory.createBusiness(approveYn = true) val approveYnBusinessUserAuth = TestDataFactory.createBusinessUserAuth(approveYnBusiness) every { businessDetailService.findById(businessId) } returns approveYnBusiness every { businessUserAuthService.findUserAuthByBusinessAndEmail(businessId, passportVO.email) } returns Result.success(approveYnBusinessUserAuth) every { businessUserAuthService.updateAccessed(businessId, passportVO.email) } just Runs every { jwtComponent.setCookieByPayload(any()) } returns base.cookie val response = businessDetailService.authority(businessId, passportVO) response.body?.id shouldBe businessId response.body?.auth shouldBe approveYnBusinessUserAuth.auth response.body?.financialAuth shouldBe approveYnBusinessUserAuth.financialAuth response.headers.getFirst(HttpHeaders.SET_COOKIE) shouldBe base.cookie response.headers.getFirst(HttpHeaders.SET_COOKIE) shouldNotBe null } }
728x90
반응형
'Blog > TIL' 카테고리의 다른 글
2025-01-13 (월) (1) | 2025.01.13 |
---|---|
2025-01-10 (금) (1) | 2025.01.10 |
2025-01-08 (수) (0) | 2025.01.08 |
2025-01-07 (화) (0) | 2025.01.07 |
2025-01-06 (월) (0) | 2025.01.06 |
댓글