spring-boot - 如何使用 Mockk 在 Kotlin 中模拟 LocalDateTime()
问题描述
我正在为创建匿名用户的 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)
}
用户服务.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)
}
}
我只是不确定如何完成我正在尝试的事情。
解决方案
事实证明我基本上是对的。我只需要稍微调整一下。
verify { userRepository.save(anonUser.capture) }
assertEquals(anonUser, user)
推荐阅读
- android - 如何确定手机是否有缺口
- angularjs - 如何在子指令中访问父控制器的功能
- android - 如何获取存储在使用 context.getDir(directoryName, Context.MODE_PRIVATE) 创建的文件夹中的文件的 URI?
- electron - Electron - ipcRenderer 在异步类中不起作用
- spring-webflux - 反应堆网络客户端
- javascript - 如何在 iframe 中更改 src 函数
- java - 地图在导航抽屉上时不显示当前位置
- android - 如何将 firebase 注册用户与现有 firebase 数据库进行比较
- python - 处理全局“几乎常量”的推荐模式是什么?
- node.js - Nodejs Mongodb:findByIdAndUpdate 没有返回正确的错误