Open mjkim103301 opened 4 years ago
org.opentest4j.AssertionFailedError: expected:<[-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 8, 0, ...] and 460974 more> but was:<[]>
org.koin.core.error.NoBeanDefFoundException
org.koin.core.error.NoBeanDefFoundException: No definition found for 'com.sia.tile.server.module.Cache' has been found. Check your module definitions.
at org.koin.core.scope.Scope.findDefinition(Scope.kt:170)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:164)
at org.koin.core.scope.Scope.get(Scope.kt:128)
at com.sia.tile.server.route.SaveToCacheRequestKt.saveTileToCache(SaveToCacheRequest.kt:306)
at com.sia.tile.server.route.SaveToCacheRequestKt$requestSaveTileToCache$1$1.invokeSuspend(SaveToCacheRequest.kt:36)
at com.sia.tile.server.route.SaveToCacheRequestKt$requestSaveTileToCache$1$1.invoke(SaveToCacheRequest.kt)
아래 사진에서 module 을 modules( )로 감싸지 않았기 때문으로 보임.
modules() 로 감싸니까 해결됨.
새로운 오류 발생함..
Exception in thread "ChannelSystem @coroutine#8" com.sia.core.infra.exception.NotRegisteredException
Exception in thread "ChannelSystem @coroutine#8" com.sia.core.infra.exception.NotRegisteredException: ReqRenderWithRange is not registered at StandaloneCoroutine
at com.sia.core.infra.system.channel.CoroutineChannelSystem$request$$inlined$suspendCoroutine$lambda$1.invokeSuspend(CoroutineChannelSystem.kt:53)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:832)
### 원인
테스트 모듈 상에서 ReqRenderWithRange 가 서비스에 등록이 안되어있음.
### 시도한 방법
1. HttpTestExtention의 beforeAll() 에 CacheManageService(channelSystem).start(configManager) 를 등록함.
-> 그런데 BasicRouteTest의 beforeEach() 부분보다 beforeAll() 이 먼저 실행되어서 beforeEach() 부분에 등록되어있던 캐시를 CacheManageService 에서 사용하지 못하는 오류 발생함.
-> 그래서 beforeEach()부분의 startKoin()부분을 모두 beforeAll()로 가져옴.
-> 목으로 등록해야하는 부분 등록해줌.
![image](https://user-images.githubusercontent.com/39117025/91257610-55017380-e7a5-11ea-883a-a932e54bf3c2.png)
-> 개별 테스트는 성공하는데 테스트 전체를 한번에 돌릴 때는 Koin을 못찾는다는 오류가 뜸.
2. 위의 1방법을 고대로 BasicRouteTest로 옮겨서 해결함.
### 해결방법
2번 방법으로 해결함.
![image](https://user-images.githubusercontent.com/39117025/91267835-238da580-e7af-11ea-9e18-0250927e697d.png)
버그를 발견하게 된 과정 테스트 코드 수정하다가 given에 "this.spec" 에 빨간줄 생겨서 뺐더니 오류가 발생한 것 같음. java.lang.IllegalStateException: REST Docs configuration not found. Did you forget to add a RestAssuredRestDocumentationConfigurer as a filter when building the RequestSpecification? at org.springframework.util.Assert.state(Assert.java:94)
버그의 원인 코루틴 스코프 내부라서 오류가 발생하는 것 같음. 코루틴 블럭을 설정하니까 this 가 CoroutineScope 가 되어버렸음.
문제해결을 위해 시도해본 방법들 .given(this.spec) -> .given(spec) 으로 수정
문제를 해결한 방법 위 방법으로 해결함.
새로운 오류 발생..