首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过模拟getter测试类

通过模拟getter测试类
EN

Stack Overflow用户
提问于 2019-04-16 18:21:53
回答 1查看 863关注 0票数 0

我试着用getter测试一个类,这个类有两个属性,其中一个getter调用静态方法。我想用静态方法模拟getter,以测试另一个getter的解析逻辑。问题是无法通过getter访问变量,因此无法调用mock。

我在kotlin文档中搜索getter和setter,但没有找到解决方案。

代码语言:javascript
运行
复制
class ClassToTest() {
    val firstname: String
        get() = this.fullName.split(" ")[0]

    val fullName: String
        get() = SomeService.getFullName()
}
代码语言:javascript
运行
复制
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。

谁能给我指个方向吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-16 19:12:11

据我所知,您正在尝试测试您的firstname计算属性。为此,您需要打开您的类和fullName属性。

代码语言:javascript
运行
复制
open class ClassToTest() {
    val firstname: String
        get() = this.fullName.split(" ")[0]

    open val fullName: String
        get() = SomeService.getFullName()
}

Mock只能处理open (在Java语言中不是final )实体。换句话说,它会在运行时抛出异常。

然后,要设置您的测试类,只需调用以下代码:

代码语言:javascript
运行
复制
`when`(classToTestMock.fullName).thenReturn("Walter White")

附注:我在你的类中看不到字段name,所以我用fullName替换了它。如果我错过了什么,我希望你能明白我的意思。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55705893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档