【发布时间】:2021-03-05 20:27:04
【问题描述】:
我正在为创建匿名用户的 UserService 编写测试,其中一部分包括在创建时保存时间戳。时间似乎在测试函数本身中被正确地模拟了,但是当在实际的 UserService 中添加时间戳时,会返回实时时间。如何正确模拟它?
相关的UserService函数是:
UserService.kt
fun createAnonymousUser(jwt: AuthenticationJsonWebToken): User {
val user = User()
user.anonUserId = jwt.name
user.createdAt = LocalDateTime.now(ZoneOffset.UTC)
return userRepository.save(user)
}
UserService.test.kt
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
open class UserServiceTest {
private val jwt = mockk<AuthenticationJsonWebToken>()
private val userRepository = mockk<UserRepository>()
private val authProperties = AllAuthProperties()
private val fixedClock = mockk<LocalDateTime>()
private val slotUser = slot<User>()
@BeforeTest
internal fun init() {
clearAllMocks()
}
@Test
fun getMe() {
every { jwt.name } returns "anonymous|123"
every { LocalDateTime.now() } returns LocalDateTime.MAX
val userService = UserService(userRepository, authProperties)
val user = User();
user.anonUserId = jwt.name
user.createdAt = LocalDateTime.now()
every { userRepository.save(capture(slotUser)) } returns user
val anonUser = userService.getMe(jwt)
verify { userRepository.save(anonUser) }
assertEquals(anonUser, user)
}
}
我只是不确定如何完成我正在尝试的事情。
【问题讨论】:
标签: spring-boot kotlin mockk