【发布时间】:2019-04-16 10:21:52
【问题描述】:
我尝试测试一个类,它作为两个具有 getter 的属性,其中一个 getter 调用静态方法。我想用静态方法模拟 getter 来测试另一个 getter 的解析逻辑。问题是无法通过 getter 访问变量,从而调用 mock。
我在 kotlin 文档中搜索了 getter 和 setter,但没有找到解决方案。
class ClassToTest() {
val firstname: String
get() = this.fullName.split(" ")[0]
val fullName: String
get() = SomeService.getFullName()
}
class ClassToTestTest() {
fun `firstname should return first part of the fullName`() {
val classToTestMock = mock<ClassToTest>()
`when`(classToTestMock.fullName).thenReturn("Walter White")
assertEquals(classToTestMock.firstname, "Walter)
}
}
我希望让“Walter”回来,但 ClassToTest.firstName 直接访问变量而不是模拟的 getter。
有人能指出我正确的方向吗? :D
提前致谢。
【问题讨论】:
-
那么它会返回什么?
-
由于它不使用 getter 模拟并直接访问变量,它尝试调用返回空字符串的静态方法,因此 assertEquals 失败。
-
如果使用
get() =声明了val,则不会引入实际的支持字段(变量)。您可以检查字节码以确保 -
仅限
getFullName()方法 -
实际上,我看到了
when(classToTestMock.name)stubsname属性,但没有看到fullName
标签: unit-testing testing kotlin junit mockito