Pra*_*hta 5 android kotlin okhttp ktor koin
这是我的应用程序测试类
class ApplicationTest {
private val heroRepository: HeroRepository by inject(HeroRepository::class.java)
@OptIn(InternalAPI::class)
@Test
fun `access all heroes endpoints, assert correct information`() = testApplication {
val response = client.get("/naruto/heroes")
assertEquals(
expected =
"""
{
success = true,
message = "ok",
prevPage = null,
nextPage = 2,
heroes = ${heroRepository.heroes[1]!!}
}
""".trimIndent() ,
actual = response.bodyAsText()
)
}
}
Run Code Online (Sandbox Code Playgroud)
当 HeroRepository 进行注入并且我使用 koin 进行依赖注入时,它显示 java.lang.ClassCastException 的错误
java.lang.ClassCastException: class com.example.repository.HeroRepositoryImpl cannot be cast to class com.example.repository.HeroRepository (com.example.repository.HeroRepositoryImpl is in unnamed module of loader io.ktor.server.engine.OverridingClassLoader$ChildURLClassLoader @7f6ad6c8; com.example.repository.HeroRepository is in unnamed module of loader 'app')
Run Code Online (Sandbox Code Playgroud)
这是我的 AllHeroesRoute,这里完美地注入了 HeroRepository
fun Route.getAllHeroes() {
val heroRepository: HeroRepository by inject()
get("/naruto/heroes") {
try {
val page = call.request.queryParameters["page"]?.toInt() ?: 1
require(page in 1..5)
val apiResponse = heroRepository.getAllHeroes(page = page)
call.respond(
message = apiResponse,
status = HttpStatusCode.OK
)
} catch (e: NumberFormatException) {
call.respond(
message = ApiResponse(success = false, message = "Only numbers allowed"),
status = HttpStatusCode.BadRequest
)
} catch (e: IllegalArgumentException) {
call.respond(
message = ApiResponse(success = false, message = "Heroes Not Found"),
status = HttpStatusCode.BadRequest
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,禁用developmentMode 修复了它:
fun myTestFunc() = testApplication {
environment {
developmentMode = false
}
....
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |