什么是Kotlin测试双打哲学?

时间:2017-05-26 07:37:45

标签: unit-testing kotlin language-design test-double

test doubles的Kotlin哲学是什么?默认情况下所有类和函数都被密封(不是 open ),像Mockito这样的模拟框架显然不是一等公民。

关于problem以及可能的solutions已经写了很多,但Kotlin的设计师在考虑使用双打时会考虑什么?它是假货和存根,还是你应该扮演你自己的间谍和嘲笑?

3 个答案:

答案 0 :(得分:2)

Kotlin设计的很大一部分是考虑到Joshua Bloch的Effective Java,意味着默认关闭,不变性等等。

因此,这些问题也存在于Java中。这些问题的解决方案是尽可能使用接口,因此您可以为生产代码提供测试双打或任何其他实现。

对于测试,这些可能是模拟,假货,或存根,或者你有什么。请记住,编写良好的内存存储库在测试中比在为该类设置模拟方法更容易处理。

答案 1 :(得分:2)

像Mockito这样的框架是一等公民,包括直接提到它们是Kotlin 1.0.6中发布的all-open编译器插件的原因之一。您对问题/解决方案的引用已过时,如果这些作者更新了帖子会很好。

从那个release announcement你会看到Mockito专门喊出来:

  

全开放式编译器插件使用特定注释对类进行注释,并且在没有显式open关键字的情况下打开它们的成员,因此使用Spring AOP或Mockito等框架/库变得更加容易。您可以在相应的KEEP中阅读有关全开的详细信息。

     

我们为Gradle和Maven提供全开放式插件支持,以及IDE集成。

该插件可以使用命令行编译器,IDE编译器以及Gradle和Maven来使用。

其他参考资料:

答案 2 :(得分:0)

除了@nhaarman的评论外,另一个选择是Mockito-Kotlin。我喜欢Kotlin的类默认是final的,因此all-open编译器插件对我来说不是一个好选择。