java 如何使用Maven只运行以前失败的JUnit 5测试?

myss37ts  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(239)

我有一组关于junit 5,maven,java的自动测试。我需要写一个脚本或方法,检查是否有失败的测试,从以前的执行。如果有这样的测试,那就运行它们。
在我的TestWatcher中,我得到了一个失败测试的列表,但是我不明白如何告诉maven只运行它们。我知道有一个通过mvn test -Dtest=“TestClass 1,TestClass 2”运行测试的选项,但是如果有20个测试,这就不是一个选项了。
@RepeatedTest junit注解以及surefire rerunFailingTestsCount属性都不合适,因为它们会在删除测试时立即触发。当然,这很好,但不适合这个特定的任务。

wpx232ag

wpx232ag1#

据我所知,有一个选项可以使用LauncherFactory运行特定的测试。但还有另一种选择,它并不是特别为大量测试而设计的。总而言之-我捕获失败的测试并将它们写入文件。然后我遍历它们并在mvn test命令中替换它们。下面是实现的样子:
1.此实用程序将获得的每个值写入文件

public static void writeLine(final String value, final String filepath) throws IOException {
 try (FileWriter fileWriter = new FileWriter(filepath, true)) {
     fileWriter.append(value);
     fileWriter.append("\n");
     fileWriter.flush();
 }

1.在实现TestWatcher类的testFailed方法中,我触发将倒下的方法的名称写入文件。FileUtils -实用程序所在的类的名称。方法中的trim()需要子字符串

try {
     FileUtils.writeLine(context.getDisplayName().substring(0, context.getDisplayName().length() - 2),
             "failedTests"); }

1.最后,我有一个sh脚本,它读取文件并翻转方法的名称,然后清除文件
`

filepath="failedTests.txt"
testclass="*Test#"
script=""
for var in $(cat $filepath)
do
  script+="${testclass}${var}, "
  done
mvn -Dtest="$script" test
true > "$filepath"

`
输出将是一个类似mvn -Dtest=*Test#failmethod1,*Test#failmethod2,“test的字符串。运行脚本将只运行上次运行中的测试。
filepath=“failedTests.txt”-文件,其中记录了测试以及从何处获取丢弃的测试。
我有所有带有nameTest签名的类。所以我使用 *Test构造。也就是说,我选择所有类。您可以阅读有关基于模板的类选择here的内容。它还解释了为什么需要#符号(以选择特定方法)。
true >“$filepath”-清理文件

相关问题