Spock 为 expect: 和 where: 块中的 Gradle 任务方法提供临时文件

Spock to provide temporary files for the Gradle task method within expect: and where: blocks

我想使用 Spock 的数据驱动测试。

我的任务有一个带有 File 参数的方法要处理。结果是一个带有已处理行的 Array。如果没有任何有效的处理提到的数组将具有 0 大小。我使用 JUnit 规则创建临时文件夹,我怀疑这是问题所在。

我该如何解决这个问题?

class H2JSpec extends Specification {

   @Rule
   TemporaryFolder temporaryFolder
   @Shared
   private ArrayList<File> tempFiles = []

   def "let's build the mappings for template"() {
      setup:
      Project project = ProjectBuilder.builder().build()
      H2JTask task = project.task('h2j', type: H2JTask)

      def inputs = ["""#dsfs

""",
    """#this file defines the mapping of h files declarations into java errorcodes: autoenum=off prefix=ec_ class=test.framework.base.MsgErrorCodes
"""]

      tempFiles.add(temporaryFolder.newFile('1.txt'))
      tempFiles.add(temporaryFolder.newFile('2.txt'))

      tempFiles[0].withWriter { it << inputs[0] }
      tempFiles[1].withWriter { it << inputs[1] }

      expect:
      task.prepareCommandList(a).size() == b

      where:
      a || b
      tempFiles[0] || 0
      tempFiles[1] || 1

   }
}

结果是java.io.FileNotFoundException

老实说,我完全不使用 Rule 并按以下方式重写测试:

@Grab(group='org.spockframework', module='spock-core', version='1.0-groovy-2.4')

import spock.lang.*

class H2JSpec extends Specification {

  def "let's build the mappings for template"() {
    setup:
      def task = new A()

    when:
      def f = File.createTempFile('aaa', 'bbb')
      f.write(a)

    then:
      task.prepareCommandList(f).size() == b

    where:

      a          || b
      """#dsfs

    """          || 3
      """#this file defines the mapping of h files declarations into java errorcodes: autoenum=off prefix=ec_ class=test.framework.base.MsgErrorCodes
    """          || 2

  }
}

class A {
   List<String> prepareCommandList(File f) {
    f.readLines()
  }
}