【发布时间】:2022-01-26 14:14:05
【问题描述】:
我的代码使用从 JWT 派生的属性扩展 Spring Boot 的 Authentication 类。例如:
import org.springframework.security.core.Authentication
...
val Authentication.role: List<String>?
get() = (principal as? Jwt)?.let {
if (it.containsClaim("test/role/claim")) {
it.getClaimAsStringList("test/role/claim")
} else {
null
}
}
这在代码中工作得很好,但我坚持如何用 mockk 测试它。
在这个例子中,“角色”根本不会被命中
fun mockAuthenticationWithAuthorities(
userId: String,
authorities: Collection<Authorities> = emptyList(),
principal: Any? = null,
role: List<String>? = null,
) =
mockk<Authentication>().also {
every { it.name } returns userId
every { it.authorities } returns authorities.map { SimpleGrantedAuthority(it.value) }
every { it.principal } returns principal
every { it.role } returns role
}
根据这里的一些答案,我尝试了这种变化:
fun mockAuthenticationWithAuthorities(
userId: String,
authorities: Collection<Authorities> = emptyList(),
principal: Any? = null,
role: List<String>? = null,
) =
mockk<Authentication>().also {
every { it.name } returns userId
every { it.authorities } returns authorities.map { SimpleGrantedAuthority(it.value) }
every { it.principal } returns principal
every { it getProperty "role" } returns role
}
但它失败了io.mockk.MockKException: can't find property role for dynamic property get
任何想法如何正确测试这个案例?
谢谢。
【问题讨论】: