2

我正在设置 Randoop 测试用例生成以在我的项目中运行。我通过 JavaExec 类型的 Gradle 任务实现了这一点:

task RandoopGenerateL1Tests(dependsOn: ['assembleDebug']) {
  group = "Verification"
  description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."

  //Various setup things here...

  doLast {
    javaexec {
      classpath = tasks['testDebugUnitTest'].classpath
      classpath = classpath + files('D:\\randoop-3.1.5\\randoop-all-3.1.5.jar')

      systemProperty 'RANDOOP_PATH', 'D:\\randoop-3.1.5'
      systemProperty 'RANDOOP_JAR', 'D:\\randoop-3.1.5\\randoop-all-3.1.5.jar'

      def classlistarg = '--classlist=' + classlistfilepath
      def packagenamearg = '--junit-package-name=' + key
      def junitoutputdirarg = '--junit-output-dir=' + projectDir.path + '/src/randooptest/java'
      def timelimitarg = '--timeLimit=10'

      main = 'randoop.main.Main'
      args 'gentests',classlistarg,packagenamearg,junitoutputdirarg,timelimitarg

      println "Randoop will be invoked with args: " + args.toString()
    }
  }
}

--timeLimit=10 参数旨在对 Randoop 的探索阶段应用时间限制(以秒为单位),但这对我来说只是偶尔起作用。在此任务的某些执行中,Randoop 开始探索阶段,然后“冻结”——java.exe 进程消耗 0% CPU 并且没有输出发生。

是否可以对 JavaExec 任务设置时间限制以对该任务应用时间限制?

谢谢!

4

2 回答 2

0

据我所知,您不能在JavaExec任务或javaExec方法调用上设置超时。

顺便提一句。您不使用类型的任务,JavaExec而是使用javaExec方法调用。仅当您想在自定义任务中做更多事情时,这才有意义。如果您只想使用 java exec,则应该使用类型的任务JavaExec

我认为要获得您想要的行为,您需要使用标准的 Groovy 方式来调用外部进程,例如["java", "-jar", "your.jar", "your", "arguments"].execute()并使用Process.waitForOrKill(long)等待一段时间然后终止进程。

于 2018-01-15T16:45:50.977 回答
0

最后,我没有对我的任务实施任何时间限制,而是弄清楚为什么 Randoop 有时会“卡住”这么长时间(它正在测试一个只是休眠的 wait(...) 方法)并将 Randoop 设置为省略这种方法。

于 2018-01-22T15:41:35.823 回答