我试着用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。
谁能给我指个方向吗?
提前谢谢。
发布于 2019-04-16 11:12:11
据我所知,您正在尝试测试您的firstname
计算属性。为此,您需要打开您的类和fullName
属性。
open class ClassToTest() {
val firstname: String
get() = this.fullName.split(" ")[0]
open val fullName: String
get() = SomeService.getFullName()
}
Mock
只能处理open
(在Java语言中不是final
)实体。换句话说,它会在运行时抛出异常。
然后,要设置您的测试类,只需调用以下代码:
`when`(classToTestMock.fullName).thenReturn("Walter White")
附注:我在你的类中看不到字段name
,所以我用fullName
替换了它。如果我错过了什么,我希望你能明白我的意思。
https://stackoverflow.com/questions/55705893
复制相似问题