Instant.now().toString() 的 Mocck 问题
Mocck issue with Instant.now().toString()
我实现了一个接口。在那里我将时间戳作为参数传递给函数。为了获取当前时间,我使用了 Instant.now().toString()
.
函数如下所示:
fun createId() {
val values = Record(name = "ABC", timestamp = Instant.now().toString())
interface_name.store(values)
}
@Test
fun `test1 for createId`() {
val values = Record(name = "ABC", timestamp = "2020-12-28")
every { interface_name.store(values) } just runs
}
这给我:Verification failed
因为时间戳不同。我无法弄清楚如何模拟 Instant.now() 以便在测试时获得静态时间戳。感谢任何帮助。
当所有依赖项都作为参数传递时,单元测试很容易。因此,与其在函数内创建对象,不如基于抽象设计函数并将依赖项作为参数传递总是好的。
fun createId(clock: Clock = Clock.systemUTC()): Record {
val values = Record(name = "ABC", timestamp = Instant.now(clock).toString())
interface_name.store(values)
return values
}
@Test
fun `test1 for createId`() {
val clock = Clock.fixed(Instant.parse("2021-01-01T00:00:00Z"), UTC)
val record = createId(clock)
assertEquals(Record(name = "ABC", timestamp = "2021-01-01T00:00:00Z"), record)
}
我实现了一个接口。在那里我将时间戳作为参数传递给函数。为了获取当前时间,我使用了 Instant.now().toString()
.
函数如下所示:
fun createId() {
val values = Record(name = "ABC", timestamp = Instant.now().toString())
interface_name.store(values)
}
@Test
fun `test1 for createId`() {
val values = Record(name = "ABC", timestamp = "2020-12-28")
every { interface_name.store(values) } just runs
}
这给我:Verification failed
因为时间戳不同。我无法弄清楚如何模拟 Instant.now() 以便在测试时获得静态时间戳。感谢任何帮助。
当所有依赖项都作为参数传递时,单元测试很容易。因此,与其在函数内创建对象,不如基于抽象设计函数并将依赖项作为参数传递总是好的。
fun createId(clock: Clock = Clock.systemUTC()): Record {
val values = Record(name = "ABC", timestamp = Instant.now(clock).toString())
interface_name.store(values)
return values
}
@Test
fun `test1 for createId`() {
val clock = Clock.fixed(Instant.parse("2021-01-01T00:00:00Z"), UTC)
val record = createId(clock)
assertEquals(Record(name = "ABC", timestamp = "2021-01-01T00:00:00Z"), record)
}