gpt4 book ai didi

gradle - 如何使Gradle在某些控制台输出上失败测试

转载 作者:行者123 更新时间:2023-12-03 03:56:07 25 4
gpt4 key购买 nike

我试图将Gradle配置为在检测到特定控制台输出时使测试失败,但前提是该测试尚未失败。

为了获得更好的上下文,每当将"LEAK"单词记录到控制台时,我都会尝试通过测试,而Netty将把它变成automatically log

我当前的解决方案如下所示:

ext {
testsWithLeak = [:]
}

test {
useJUnitPlatform()

onOutput { test, output ->
if (output.message.contains("LEAK")) {
testsWithLeak[test] = output.message
}
}

afterTest { test, result ->
if (result.getResultType().equals(TestResult.ResultType.FAILURE)) {
testsWithLeak.remove(test);
}
}

finalizedBy 'checkLeaks'
}

task checkLeaks {
dependsOn 'test'
doLast {
testsWithLeak.each{entry ->
throw new GradleException("ERROR: $entry.key produced leak: $entry.value")
}
}
}

这通常有效,并且在检测到 "LEAK"消息后将正确地使构建失败。问题在于,由于测试本身被视为 SUCCESS,因此它似乎已被缓存并且不会在后续构建中再次运行。我尝试在调用 cleanTest时调用 GradleException,但这无济于事。

请注意,我使用 testsWithLeak变量是因为我只想在测试尚未失败的情况下抛出此异常。测试可能由于其他断言而失败,在这种情况下,我不想检查泄漏(因为 GradleException可能掩盖了潜在的断言失败)。

还要注意,将 GradleException作为 afterTest闭包的一部分似乎不会使构建失败。

我怎么能够:
  • 当测试记录此消息
  • 时,构建失败
  • 仅在测试没有失败的情况下才抛出此异常
  • 确保在以后的尝试中构建会正确失败(不依赖命令行选项)
  • 最佳答案

    该测试被认为是最新的,因为自上次运行以来测试输入(类文件)和测试输出(xml报告)未更改。您可以执行以下操作,以确保测试永远不会最新

    test {
    outputs.upToDateWhen {false}
    ...
    }

    看到
  • https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskInputs.html
  • https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskOutputs.html
  • 关于gradle - 如何使Gradle在某些控制台输出上失败测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59547571/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com