【问题标题】:How should I test Kotlin extension functions?我应该如何测试 Kotlin 扩展功能?
【发布时间】:2017-02-21 22:46:08
【问题描述】:

谁能告诉我应该如何在 Kotlin 中对扩展函数进行单元测试?由于它们是静态解析的,应该将它们作为静态方法调用还是非静态进行测试?此外,由于语言可以与 Java 完全互操作,应该如何对 Kotlin 扩展功能进行 Java 单元测试?

【问题讨论】:

    标签: java unit-testing testing kotlin language-interoperability


    【解决方案1】:

    好吧,要测试一个方法,无论是否是静态的,您都可以像实际代码一样调用它,并检查它是否正确。

    假设这个扩展方法,例如,在文件 com/foo/Bar.kt 中定义:

    fun String.lengthPlus1(): Int {
        return this.length + 1
    }
    

    如果你用 Kotlin 编写测试(你通常会这样做来测试 Kotlin 代码),你会编写

    assertThat("foo".lengthPlus1()).isEqualTo(4);
    

    如果你用 Java 编写它(但你为什么要这样做?)

    assertThat(BarKt.lengthPlus1("foo")).isEqualTo(4);
    

    【讨论】:

    • 从来没有打算为 Kotlin 编写 Java 测试,那真是个坏主意 :) 更多的是检查它的行为方式。但是如果我想验证是否调用了该方法(例如使用 Mockito)而不是检查返回值呢?
    • 正如Java代码所示,扩展方法实际上是一个静态方法。 Mockito 不能模拟静态方法。
    • @TheTechWolf 你真的不应该关心检查你的扩展方法是否被调用,你应该验证预期的结果是否存在。如果你的扩展方法过于复杂并且需要断言它的调用,它可能应该被重构为一个更可测试的类。虽然这一切都取决于您的用例以及扩展功能实际在做什么,但您的用例是什么?
    • 如果这些扩展在一个类中怎么办?
    • 完全正确 - 如何测试在类中定义的扩展函数?这就是让我想到这个问题的搜索——这里根本没有回答。伤心。测试顶级扩展功能很容易,甚至不值得提问和回答......
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多