kotlin 测试_实验:Kotlin和突变测试

kotlin 测试

大约一年半以来,我做了很多有关突变测试 演讲 。 在这些文章中,我的观点是要表明Code Coverage的唯一好处是它易于计算,但毫无意义-因此进行了突变测试。

从一段时间以来,我一直对Kotlin感兴趣, Kotlin是JetBrains的一种在JVM上运行的语言。 我很自然地想检查如何将突变测试应用于Kotlin语言。 由于Kotlin太年轻,无法拥有自己的专用突变测试工具,因此我使用了Java专用工具Pit 。 我没想到太多,这是我的发现。

我从演示项目的Kotlin端口开始。 它有两个简单的类,每个都有一个相关的测试。 在第一个中,断言丢失,在第二个中,不测试<运算符的边界条件。 这是进行突变测试的理想用例。 这是一个Maven项目,因此命令非常简单:

mvn org.pitest:pitest-maven:mutationCoverage

有趣的是,这在执行突变覆盖率方面以及在参考引用作为问题根源的行方面都非常有效。

Math类的自定义实现

低通谓词

我想走得更远,使用一个真实的项目。 Kotlin的人很友好 ,可以将我重定向到基于Kotlin的Web框架KTor 。 我尝试了相同的命令,但仅限于一个模块-ktor-features / ktor-server-sessions(我不知道它的作用,无论如何都不相关)。 是的,有摩擦。

首先,Pit在某些地方无法正确解析生成的字节码:

PIT >> WARNING : Found more than one mutation similar on same line in a finally block. Can't correct for inlining.

更糟糕的是,有很多超时错误。 由于涉及到一些线程,因此这实际上不是一个阻碍。

PIT >> WARNING : Slave exited abnormally due to TIMED_OUT

对于此项目,报告的确很长,但是有些错误确实与您希望从Java代码中获得的错误相似,例如:

removed call to kotlin/jvm/internal/Intrinsics::checkParameterIsNotNull → NO_COVERAGE

这是报告的示例:

可拉链表

再次,Pit能够将实际问题与发现的问题绑定在一起。 生活不好吗? 如果您在这一点上停下来,可能是这样。 但是在另一个项目上运行Pit-例如,ktor-features / ktor-locations失败了。

The class org.jetbrains.ktor.locations.Locations$WhenMappings does not contain a source debug information.
All classes must be compiled with source and line number debug information

似乎使用Kotlin中的when构造会生成一个不包含调试信息的内部类,Pit需要发挥其魔力。 让我们排除有问题的类及其内部映射类:

mvn org.pitest:pitest-maven:mutationCoverage-DexcludedClasses= org.jetbrains.ktor.locations.Locations *

它可以再次工作并产生预期的结果:

转换服务

目前还没有针对Kotlin的突变测试工具,考虑到Java生态系统的历史,可能永远不会有。 但是,变异测试是断言测试真正质量的宝贵工具。 即使Pit对于Kotlin来说不是完美的选择,但放弃它也是愚蠢的。

翻译自: https://blog.frankel.ch/experimental-kotlin-mutation-testing/

kotlin 测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值