Java Windows、Gradle和Cucumber组合在生成报告时引发IOException

Java Windows、Gradle和Cucumber组合在生成报告时引发IOException,java,windows,gradle,groovy,cucumber,Java,Windows,Gradle,Groovy,Cucumber,我正在做一个结合了Windows、Java、Groovy、Gradle和Cucumber的项目。这种组合给我的Windows计算机带来了一些我的*NIX同事没有遇到的问题。在运行gradle构建时,gradle希望输出一些报告。这些报告的位置和文件名显然是由Cucumber测试的定义或输出决定的。不幸的是,使用的名称不能用作文件名,因此我为每个测试报告获取一个IOException 对于黄瓜测试,我们使用以下结构: Scenario Outline: Receive and parse Re

我正在做一个结合了Windows、Java、Groovy、Gradle和Cucumber的项目。这种组合给我的Windows计算机带来了一些我的*NIX同事没有遇到的问题。在运行gradle构建时,gradle希望输出一些报告。这些报告的位置和文件名显然是由Cucumber测试的定义或输出决定的。不幸的是,使用的名称不能用作文件名,因此我为每个测试报告获取一个IOException

对于黄瓜测试,我们使用以下结构:

  Scenario Outline: Receive and parse ReturnItem from Service
    Given The message from service return item outlined in <messagePath>
    When We process the message
    Then XXX posted a message to YYY on topic <topic> with event <eventType>
    And payload matches <resultPath>

 | messagePath               | topic      | eventType  | resultPath                 |
 | /test/testxml.xml         | test_topic | EVENT_TYPE | /result/result.json        |
有人知道怎么解决这个问题吗?我能想出的唯一“解决方案”是禁用报告,这是可行的,但与其说是解决方案,不如说是一种变通办法。对于禁用,我在gradle.build中为此使用了以下配置:

    apply plugin: 'java'
    apply plugin: 'groovy'

    test {
        reports {
            junitXml.enabled = false
            html.enabled = false
        }
    }

(灵感来自:)

根据提供的信息,它似乎正在尝试创建一个名为:

'C:\xxx\project\project test\build\reports\tests\test\packages\|\test\testxml.xml |测试主题|事件|类型| \result'


您能否在传入
messagePath
时显示代码?我怀疑你是在传递整行数据,而不仅仅是
消息路径
(我猜测你是在数组上执行.toString(),而不是传递数组的第一个元素)

我终于找到了罪魁祸首。显然,这些文件名对应于JUnit生成Cucumber测试报告的默认行为。在*NIX上,这不会带来任何问题。但是,在Windows上,由于
示例中的管道,这将导致异常。
IOException
显然有些特殊,因为我在互联网上发现的大多数异常是
FileNotFoundException
s。这就解释了为什么我花了这么长时间才找到答案,我把注意力集中在了例外上

这里的解决方案是在运行Cucumber测试时,使用以下
JUnitOption
作为
@CucumberOptions
注释:
--文件名兼容名称

Java&Spring的代码示例如下所示:

@RunWith(Cucumber.class)
@CucumberOptions(junit={--filename兼容名称“})
公营黄瓜商{
}

如果这些非破坏性的操作系统相关选项是默认选项而不是可选选项,那就太好了。

谢谢你的建议,我在原来的帖子中添加了代码。它不会将整行发布到Cucumber特性,只会将messagePath发布到Cucumber特性。但我怀疑Gradle拾取了整行内容,并试图使用它生成测试报告。您可能遇到了以下问题:。您使用的cucumber/gradle版本是什么?您的评论让我对github问题追踪器进行了更多的调查,并进行了进一步的搜索。这最终让我找到了我在下面发布的解决方案。谢谢你的时间和关注!
    apply plugin: 'java'
    apply plugin: 'groovy'

    test {
        reports {
            junitXml.enabled = false
            html.enabled = false
        }
    }