Pitest(又名 PIT)是最先进的 Java 和 JVM 突变测试系统。
请访问 https://pitest.org 阅读所有相关内容
+funmodifiablecollection
过滤器中字段的不可修改集合#1321 中的 API 更改是向后兼容的,但针对 1.16.0 编写的插件可能不适用于早期版本。
默认情况下,#1310 的过滤处于关闭状态。要激活它,请添加过滤器字符串+funmodifiablecollection
。
1309 添加了新的 maven 属性parseSurefireArgLine
。默认情况下设置为 true,但现在可以通过将其设置为 false 来禁用 Surefire argline 解析。
#1305 未记录包名称 com.sun* 中代码的覆盖范围
旨在获取“com.sun.*”包中旧版 JDK 类的过滤器缺少'
,导致如果被测试的代码恰好位于以“sun”开头的包中,则不会注册代码覆盖率。
当实现了抑制延迟执行代码的变异过滤的附加逻辑时,将重新引入静态初始化程序代码的调用动态调用跟踪。
请注意,以前需要在 Surefire 和 Pitest 的jvmArgs
和argline
参数之间复制 argline 参数的 Maven 用户在升级时可能需要调整其配置。提供给 Surefire 的条目现在将自动添加到 Pitest。
#1267 将确保现在报告 JUnit5 插件以前遇到的隐藏错误。这是向后兼容的 API 更改。在 JUnit5 插件更新为使用扩展的 api 之前,它不会产生任何影响。更新后的插件将与早期版本的pitest不兼容。
由于 #1251 中的重大 api 更改,在升级到 Pitest 1.15.0 时,arcmutate kotlin 插件应升级到 1.1.0
#1246 使用历史文件时优先考虑之前的查杀测试
#1212 很大程度上解决了 maven 用户保持 Pitest-junit5-plugin 版本与 junit5 版本同步的问题。
当与 Pitest-junit5-plugin 1.2.0 一起使用时,pitest 现在将自动选择与测试系统使用的 junit5 版本兼容的 junit-platform-launcher 版本。
对于 gradle 用户来说,在使用 1.2.0 版的pitest-junit5-plugin 时仍然可能遇到 api 兼容性问题。不过,现在可以通过手动将正确版本的 junit-platform-launcher 添加到类路径来解决这些问题。
希望 Pitest gradle 插件的未来版本能够实现类似于 Pitest-maven 解决方案的修复。
**.
全局模式(感谢@Pfoerd) 控制台上报告的行覆盖率统计信息包括整个项目的代码行,即使应用了过滤器也是如此。这导致覆盖率分数极低。
请注意,#1150 包括破坏性的界面更改,可能需要更新第三方插件。
excludedRunners
参数添加到命令行界面和 Ant#1067 的结果是,只为每个 JVM 的单个类创建突变,这一点很重要。因此, MutationGrouper
扩展点已被删除,因为这会违反此约束。不再支持任何使用此扩展的第三方插件。
版本还包括对内部数据结构的多项更改。任何依赖这些结构的第三方插件可能需要更新。
1116 提供了一种粗略的方法来排除 Pitest 的其他过滤器未拾取的自动生成的代码。默认情况下它是禁用的,因为它可能会排除在某些情况下对突变有效的代码,但可以通过添加功能字符串+nofirstline
来启用。
添加对 Kotlin 等语言的支持,其中源文件可能不在与其包匹配的目录结构中。请注意,如果相同的文件名出现在多个位置,pitest 无法保证解析正确的文件。
请注意,#1085 更改了默认行为,因此默认情况下报告不再写入带时间戳的目录。如果您需要此行为,则需要显式启用它。
1078 是一个重大的界面更改,但包含在一个点版本中,因为据信当前没有外部客户端。
1054 将自动添加 headless=true (以防止 Mac 上的键盘焦点被盗)的支持移至功能中。默认情况下启用它,但可以通过将-MACOS_FOCUS
添加到功能字符串来禁用。
1055 添加了通过添加+auto_threads
特征字符串来猜测当前机器的适当线程数的选项。该选项默认禁用,专为本地使用而设计。不建议在 CI 服务器上使用。
dependencyDistance
参数由于 #1040,任何外部 Pitest 测试插件(例如 JUnit 5、TestNG、arcmutate 加速器)在升级时都必须更新到兼容版本 (1.0.0)。
早期版本的历史文件不兼容,升级时应删除。
由于#1015,在 TestNG 测试的代码库中使用 Pitest 时,现在必须配置 TestNG 插件。在早期版本中,支持是自动包含的。
由于 #993,任何希望使用面向研究的 RV 操作员的人都必须配置 Pitest-rv 插件,但是不建议将这些修改器用于一般用途。
emptyMap
而不是null由于内部更改,某些第三方插件可能与此版本不兼容。
升级前应删除所有历史文件。
由于 #930,删除条件变量的名称已略有更改,如果显式激活,可能需要在构建脚本中进行更新。
由于 #900, testPlugin
参数现已失效,但在此版本中,pitest 将继续接受它,不会出现错误。 Pitest 将使用类路径上提供的任何测试引擎,当其他测试引擎无法处理该类时,将回退到内置的 JUnit4 支持。
testPlugin
和failWhenNoMutations
的支持(感谢 @mduggan)useClasspathJar
选项支持大型类路径(感谢 @jqhan)请注意,升级时以前版本生成的历史文件与 1.3.2 及以上版本不兼容。
excludedTestClasses
参数428 改变了 exceptedClasses 过滤器的现有行为。以前,这排除了类被突变并作为测试运行,这可能需要某些人在升级时进行更改。
由于 429 TestNG 测试将不再被自动检测 - 新的testPlugin
参数必须显式设置为“testng”。
(注意 #347不会检测javax.annotaion.Generated
,因为它仅保留源代码。)
注意 - 在此版本中,maven 插件将自动确定要更改哪些类,而不是假设包名称与组 ID 匹配。
maxSurviving
突变体存活时中断构建请注意,此版本包含一个已知问题 (#231)。请升级。
includeLaunchClasspath=false
请注意,任何存储的历史文件或声纳结果在此版本中均无效。
请注意,此版本中基于 Ant 的项目的设置发生了变化。有关使用的详细信息,请参阅 ant 设置。
此版本还更改了许多内部实现细节,其中一些细节可能对那些维护与 PIT 集成的工具的人感兴趣/重要。
突变现在在内部范围内,如 https://groups.google.com/forum/#!topic/pitusers/E0-3QZuMYjE 中所述
引入了一个新类(org.pitest.mutationtest.tooling.EntryPoint),它消除了启动突变分析的各种方式中存在的一些重复。
已知问题- 修复 #33 可能无法解决 Maven 2 用户的问题。
Groovy 代码的检测尚未使用 Groovy 2 进行测试,它可能会生成与早期版本截然不同的字节代码。
由于删除了 inScopeClasses 参数,升级用户可能需要修改其构建
已知问题- 新的成员变量 mutator 可能会导致同步错误中的错误。然而,默认情况下该变元被禁用,并且 PIT 可以正确处理生成的错误。
在创建或处理问题之前,请查阅我们的问题管理规则。
Pitest 主要是我的工作,但也受益于许多其他人的贡献。
值得注意的贡献在这里不可见,因为它们是在此代码迁移到 github 之前做出的,包括
尽管 PIT 未合并 Jumble 项目 (http://jumble.sourceforge.net/) 中的任何代码,但在开发 PIT 的某些方面时,Jumble 代码库被用作指南。