我该如何测试Kotlin扩展功能?

The*_*olf 13 java testing unit-testing language-interoperability kotlin

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

JB *_*zet 19

好吧,要测试一个方法,无论是否静态,你可以将其称为真实代码,并检查它是否正确.

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

fun String.lengthPlus1(): Int {
    return this.length + 1
}
Run Code Online (Sandbox Code Playgroud)

如果您在Kotlin中编写测试(通常用于测试Kotlin代码),您可以编写

assertThat("foo".lengthPlus1()).isEqualTo(4);
Run Code Online (Sandbox Code Playgroud)

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

assertThat(BarKt.lengthPlus1("foo")).isEqualTo(4);
Run Code Online (Sandbox Code Playgroud)

  • @TheTechWolf 你真的不应该关心检查你的扩展方法是否被调用,你应该只验证预期的结果是否存在。如果您的扩展方法过于复杂并且需要断言其调用,则可能应该将其重构为更可测试的类。尽管这一切都取决于您的用例以及扩展功能实际在做什么,但您的用例是什么? (2认同)
  • 如果这些扩展在一个类中呢? (2认同)
  • 确切地说 - 如何测试类中定义的扩展函数?这就是让我想到这个问题的搜索——这里根本没有答案。伤心。测试顶级扩展功能很容易,甚至不值得提问和回答...... (2认同)