JWT 上的 Android 单元测试每次失败时都会模拟函数

问题描述 投票:0回答:1

我有以下数据类及其功能:

@JsonClass(generateAdapter = true)
data class AuthToken(
    @Json(name = "token") val access: String,
    @Json(name = "refreshToken") val refresh: String
) {
    fun isAccessTokenValid(): Boolean = isTokenValid(access)

    fun isRefreshTokenValid(): Boolean = isTokenValid(refresh)

    private fun isTokenValid(token: String): Boolean {
        return try {
            val jwt = JWT(token)
            val isExpired = jwt.isExpired(0)
            Timber.d("Token ${if (isExpired) "expired" else "valid"} [${jwt.details()}]")
            !isExpired
        } catch (e: DecodeException) {
            Timber.w(e, "Invalid auth token.")
            false
        }
    }
}

在我的单元测试中,我有以下几行:

val authToken = AuthToken("accessToken", "refreshToken")
every { authToken.isAccessTokenValid() } returns true
every { authToken.isRefreshTokenValid() } returns false

但是我收到以下错误:

每个 { ... } 块内缺少模拟调用:确保对象 块内是一个模拟。

上线

val jwt = JWT(token)

当我尝试模拟调用它的外部函数时,为什么

isTokenValid
会运行?

知道如何解决吗?

android kotlin unit-testing jwt mocking
1个回答
0
投票

要存根对象的方法,您必须将其创建为

mockk
:

val authToken = mockk<AuthToken>()
© www.soinside.com 2019 - 2024. All rights reserved.