【问题标题】:How do I mock LocalDateTime() in Kotlin with Mockk如何使用 Mockk 在 Kotlin 中模拟 LocalDateTime()
【发布时间】: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


    【解决方案1】:

    事实证明我基本上是对的;我只需要稍微调整一下。

    verify { userRepository.save(anonUser.capture) } 
    assertEquals(anonUser, user)
    

    【讨论】:

      猜你喜欢
      • 2022-09-27
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 2019-03-15
      相关资源
      最近更新 更多