【发布时间】:2020-04-08 19:48:42
【问题描述】:
如何编写单元测试以使用 Base64 解码?
我有以下测试
@RunWith(PowerMockRunner::class)
@PrepareForTest(Log::class)
class JwtDeserializerTest {
@Before
fun setup() {
PowerMockito.mockStatic(Log::class.java) // this helped with Runtime exception for having Log in my code
PowerMockito.mockStatic(Base64::class.java)
}
@Test
fun testJwtToken() {
val jwt = Jwt(jwt_token)
val expirationDateTimeFromJwtClaims = jwt.getClaim("exp")?.asLong() ?: 0L
assertTrue(expirationDateTimeFromJwtClaims != 0L)
}
}
当以下代码在内部运行以实例化 Jwt 对象时,就会发生冲突。
fun decodeFromBase64(value: String): String {
try {
val data = Base64.decode(value, Base64.DEFAULT)
if (data != null) {
return String(data, charset("UTF-8"))
}
} catch (e: UnsupportedEncodingException) {
Log.e(TAG, e.message, e)
}
return ""
}
在实例化过程中,我解码 JWT 令牌并设置一些辅助方法,同时检查声明。这包括检查令牌有多少部分,例如标头、有效负载、签名等。
在调试时,解码会导致问题。我在 Log 函数中遇到了类似的问题,但添加 PowerMockito.mockStatic(Log::class.java) 解决了该冲突。
如何为 Base64 解决这个问题?解码总是返回 null。但是,在 junit 测试之外进行测试时,我收到了正确的值。
【问题讨论】:
标签: android unit-testing junit powermockito