7 个版本
0.1.5 | 2024年7月9日 |
---|---|
0.1.4 | 2024年7月1日 |
0.1.2-beta | 2024年4月11日 |
#11 in #kotlin
31 个月下载量
185KB
4K SLoC
包含 (JAR 文件, 61KB) gradle-wrapper.jar, (JAR 文件, 61KB) gradle-wrapper.jar
突变-章鱼
基于 Rust 构建的 Kotlin 突变测试工具。
#################################################################################################################################
/$$ /$$ /$$ /$$ /$$ /$$ /$$
| $$$ /$$$ | $$ | $$ | $$ /$$/ | $$
| $$$$ /$$$$ /$$ /$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ | $$ /$$/ /$$$$$$ /$$$$$$ | $$ /$$ /$$$$$$ /$$$$$$$
| $$ $$/$$ $$| $$ | $$|_ $$_/ |____ $$| $$__ $$|_ $$_/ | $$$$$/ /$$__ $$|____ $$| $$ /$$/ /$$__ $$| $$__ $$
| $$ $$$| $$| $$ | $$ | $$ /$$$$$$$| $$ \ $$ | $$ | $$ $$ | $$ \__/ /$$$$$$$| $$$$$$/ | $$$$$$$$| $$ \ $$
| $$\ $ | $$| $$ | $$ | $$ /$$ /$$__ $$| $$ | $$ | $$ /$$ | $$\ $$ | $$ /$$__ $$| $$_ $$ | $$_____/| $$ | $$
| $$ \/ | $$| $$$$$$/ | $$$$/| $$$$$$$| $$ | $$ | $$$$/ | $$ \ $$| $$ | $$$$$$$| $$ \ $$| $$$$$$$| $$ | $$
|__/ |__/ \______/ \___/ \_______/|__/ |__/ \___/ |__/ \__/|__/ \_______/|__/ \__/ \_______/|__/ |__/
#################################################################################################################################
目录
安装
突变-章鱼目前处于测试阶段,尚未准备好投入生产使用。
安装
- 请确保已安装 homebrew。如果没有,请在终端运行以下命令进行安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 在终端运行以下命令安装 Mutant Kraken tap:
brew tap JosueMolinaMorales/mutant-kraken
- 在终端运行以下命令安装 Mutant Kraken:
brew install mutant-kraken
- 在终端运行以下命令验证安装:
mutant-kraken -v
您还可以使用 Rust 工具链安装 Mutant-Kraken
cargo install mutant-kraken
这将默认在 ~/.cargo/bin
中安装 Mutant-Kraken。
用法
Mutant-Kraken 是 Kotlin 的突变测试工具。目前处于测试阶段。请预期可能出现问题。如果您遇到任何问题,请通过 GitHub 仓库的“问题”选项卡进行报告。
命令
mutant-kraken help
或mutant-kraken -h
:打印帮助菜单。mutant-kraken mutate [PATH]
:在提供的路径上运行突变测试工具,如果未提供路径,则在当前目录运行。mutant-kraken config
:显示如何设置配置文件的说明。mutant-kraken clean
:删除mutant-kraken-dist目录。
工作原理
Mutant-Kraken有5个阶段
- 收集给定目录内的文件
- 收集每个文件的突变
- 为每个文件生成突变
- 运行每个突变的测试
收集文件
在此步骤中,工具查看给定路径并定位所有潜在的Kotlin文件以进行突变。它忽略任何不是Kotlin文件的文件,并遵循提供的配置。
如果在配置中声明您不想突变以Test.kt
结尾的文件,则它将忽略任何以Test.kt
结尾的文件。同时忽略任何目录,例如build
目录
示例mk.config.json文件,该文件忽略所有以Test.kt
结尾的文件并忽略build
目录
"ignore": {
"ignore_files": [
"^.*Test\\.[^.]*$"
],
"ignore_directories": [
"build",
]
}
收集突变
在此步骤中,工具查看每个文件并收集可以为每个文件进行的所有突变。然后,它将突变存储在mutant-kraken-dist
目录中的名为mutations.json
的文件中。
生成突变
在此步骤中,工具生成所有突变文件并将它们存储在mutant-kraken-dist/mutations
目录中。
运行测试
在此步骤中,工具为每个突变运行测试并将结果存储在mutant-kraken-dist/results
目录中。
操作符
算术替换操作符
将算术运算符替换为不同的算术运算符
一元删除操作符
删除一元运算符
逻辑替换操作符
将逻辑运算符替换为不同的逻辑运算符
关系替换操作符
将关系运算符替换为不同的关系运算符
赋值替换操作符
将赋值运算符替换为不同的赋值运算符
一元替换操作符
将一元运算符替换为不同的运算符
非空断言操作符
将非空断言运算符替换为不同的非空断言运算符
Elvis 移除操作符
删除elvis运算符
Elvis 文字更改操作符
更改elvis运算符的文本
文字更改操作符
更改文本的文本
异常更改操作符
更改抛出的异常
When 移除分支操作符
如果语句有多个分支,则从when语句中删除一个分支
移除标签操作符
在继续、跳出或返回时删除标签
功能性二进制替换操作符
将first()更改为last()或反之亦然,或将find()更改为findLast()或反之亦然
功能性替换操作符
将Any()更改为All()或None()或反之亦然,或将ForEach()更改为Map()或Filter()或反之亦然
配置
Mutant-Kraken允许您配置工具的不同方面。
以下是可以通过mutantkraken.config.json
文件配置的内容的分解
通用配置
此配置适用于整个工具。
timeout
Timeout期望一个数字,并在经过一定秒数后停止程序
默认情况下,timeout未设置
operators
Operators期望以下字符串列表
- ArithmeticReplacementOperator
- UnaryRemovalOperator
- LogicalReplacementOperator
- RelationalReplacementOperator
- AssignmentReplacementOperator
- UnaryReplacementOperator
- NotNullAssertionOperator
- ElvisRemoveOperator
- ElvisLiteralChangeOperator
- LiteralChangeOperator
- ExceptionChangeOperator
- WhenRemoveBranchOperator
- RemoveLabelOperator
- FunctionalBinaryReplacementOperator
- FunctionalReplacementOperator
默认情况下,所有操作员都是启用的
忽略配置
此配置允许您使用正则表达式忽略文件和目录
ignore_files
接受正则表达式列表
默认情况下,它忽略所有不以 .kt
结尾的文件
ignore_directories
接受正则表达式列表
默认情况下,它忽略所有构建目录
线程配置
max_threads
工具将要使用的最大线程数
默认设置为 30 线程
输出配置
这允许配置工具显示的输出
disable_end_table
它期望一个布尔值,其中 true 表示不禁用结束表格
默认为 false
日志配置
这允许配置日志记录
log_level
它期望以下值之一
- DEBUG
- INFO
- WARNING
默认为 INFO
示例 JSON
{
"general": {
"timeout": null,
"operators": [
"ArithmeticReplacementOperator",
"AssignmentReplacementOperator"
]
},
"ignore": {
"ignore_files": ["^.*Test\\.[^.]*$"],
"ignore_directories": ["dist", "build", "bin", ".gradle", ".idea", "gradle"]
},
"threading": { "max_threads": 30 },
"output": { "display_end_table": false },
"logging": { "log_level": "info" }
}
贡献
如果您想为 Mutant-Kraken 做贡献,请阅读 CONTRIBUTING.md 文件。
备注
- 如果您在一个 git 仓库中工作,建议将
mutant-kraken-dist
目录添加到您的.gitignore
文件中。
依赖关系
~45MB
~1M SLoC