mocck问题

mv1qrgav  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(378)

我实现了一个接口。在这里,我将时间戳作为参数传递给函数。为了获取当前时间,我使用了 Instant.now().toString() .
函数如下所示:

  1. fun createId() {
  2. val values = Record(name = "ABC", timestamp = Instant.now().toString())
  3. interface_name.store(values)
  4. }
  5. @Test
  6. fun `test1 for createId`() {
  7. val values = Record(name = "ABC", timestamp = "2020-12-28")
  8. every { interface_name.store(values) } just runs
  9. }

这给了我: Verification failed 因为时间戳不同。我不知道如何模拟instant.now(),以便在测试时获得静态时间戳。感谢您的帮助。

4jb9z9bj

4jb9z9bj1#

当所有依赖项都作为参数传递时,单元测试很容易。因此,与其在函数中创建对象,不如基于抽象设计函数,并将依赖关系作为参数传递。

  1. fun createId(clock: Clock = Clock.systemUTC()): Record {
  2. val values = Record(name = "ABC", timestamp = Instant.now(clock).toString())
  3. interface_name.store(values)
  4. return values
  5. }
  6. @Test
  7. fun `test1 for createId`() {
  8. val clock = Clock.fixed(Instant.parse("2021-01-01T00:00:00Z"), UTC)
  9. val record = createId(clock)
  10. assertEquals(Record(name = "ABC", timestamp = "2021-01-01T00:00:00Z"), record)
  11. }

相关问题