【问题标题】:Gradle test: show standard streams only with specific testsGradle 测试:仅显示带有特定测试的标准流
【发布时间】:2015-05-17 00:01:34
【问题描述】:

在使用 Gradle 进行测试时,我希望仅在使用 --tests 选项运行特定测试子集时在控制台上显示标准流

让我详细说明。在build.gradle 我有

test {
    testLogging {
        //showStandardStreams = true
    }
}

通常,当我运行整个测试套件时,我不喜欢从测试中获得控制台输出。但是,当我在进行特定测试时,控制台输出非常有用,因此我在使用gradle test --tests *name 执行该测试之前取消注释该行。

我想知道是否有自动化的方法来做到这一点。

编辑:让我澄清一下。我希望在运行 gradle test --tests *name 时有控制台输出,但在运行 gradle test 时没有。

【问题讨论】:

    标签: java unit-testing logging gradle


    【解决方案1】:

    要在所有测试的某些运行中获得控制台输出,您可以在命令行上提供一个附加参数 (-Poutput):

    gradle test --tests *name -Poutput

    test {
        onOutput { descriptor, event ->
            if (project.hasProperty('output')) {
                logger.lifecycle(event.message)
            }
        }
    }
    

    仅获取特定测试的控制台输出:

    test {
        onOutput { descriptor, event ->
            if (descriptor.name=='YOUR_TEST_METHOD_NAME' &&
                    descriptor.className=='YOUR_PACKAGE_QUALIFIED_CLASS_NAME') {
                logger.lifecycle(event.message)
            }
        }
    }
    

    TestDescriptorTest

    【讨论】:

    • 不能使用 gradle run 或 gradle run --tests *name codepad.org/bdzJya6I
    • gradle --version -------------------------- ---------------------- Gradle 2.7 -------------- ---------------------------------- 构建时间:2015-09-14 07:26:16 UTC 版本号:无 修订:c41505168da69fb0650f4e31c9e01b50ffc97893 Groovy:2.3.10 Ant:Apache Ant(TM) 版本 1.9.3 编译于 2013 年 12 月 23 日 JVM:1.7.0_79 (Oracle Corporation 24.79-b02) OS:Linux 3.13<.0-65-generic amd6>
    • 不知道如何在不提供附加参数的情况下执行此操作。显然,命令行参数很难可靠地访问。查看我的最后一次编辑。
    【解决方案2】:

    作为参考,我正在使用另一种方法,即读取命令行标志--info

    test {
        if (project.gradle.startParameter.logLevel == LogLevel.INFO) {
            testLogging.showStandardStreams = true
            testLogging.exceptionFormat = 'full'
        }
    }
    

    所以在运行gradle test --info 时,我会看到更多 gradle 详细信息,包括测试输出。通过此设置,我可以看到其他 gradle 信息,例如依赖项版本,这可能很有用。

    但是我认为上述答案确实可以对输出进行更多控制,例如:

    onOutput { descriptor, event ->
        if (project.hasProperty('output')) {
            def withoutLastLineFeed = event.message.substring(0, event.message.length() - 1)
            logger.lifecycle("{} ===> {}", 
                             event.destination, 
                             withoutLastLineFeed)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-05
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      相关资源
      最近更新 更多