我有一个 IntelliJ 项目,用 git 版本控制。
如何运行自上次提交以来修改的所有 JUnit 测试类?
项目工具窗口中有">已更改文件"预定义范围,可用于查看所有 VCS 更改的文件。从那里选择所有 JUnit 类,然后从上下文菜单中创建 JUnit 运行/调试配置,该配置将填充类模式以自动运行。
我不相信您可以使用任何"开箱即用"的解决方案。但是,您可以使用您选择的语言编写脚本,以查找您可以执行的"上次提交中更改的文件">
git diff --name-only HEAD~
HEAD~
是对"倒数第二个"提交的引用,仅指定一个对git diff
命令的提交引用将自动与HEAD
最新的提交进行比较。
您可以获取此输出并迭代它,也许如果您的测试类遵循与您的类类似的命名方案来测试通过为每个文件指定模式来测试执行测试?
如果你的堆栈由 GIT 和 maven 组成我们想出了这个 shell 脚本,它附加在我们的 Jenkins 编译作业的末尾:
for s in `git diff --name-only HEAD~`
do
if [[ $s == *".java" ]]; then
s=$(echo $s | tr '/' '.')
s=$(echo ${s%.java})
s=${s/.java/}
s=${s/src./}Test
echo "will test : $s"
mvn -Dtest=$s -DfailIfNoTests=false -Dfile.encoding=UTF-8 test-compile surefire:test
fi
done
解释:
Get the last commited files
for each
if it is a java file
convert name (in unix format) to FQN Test class name without extension
run the maven test target
注意:我们用于测试的文件名遵循在类文件名末尾附加Test
的约定。适应您自己的惯例
这个库似乎提供了类似的功能: https://github.com/rpau/junit4git
这是一个 JUnit 扩展,它忽略那些与 Git 存储库中上次更改无关的测试。