我正在设置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任务设置时间限制以对此任务应用时间限制?
谢谢!
答案 0 :(得分:0)
据我所知,您无法在JavaExec
任务或javaExec
方法调用上设置超时。
顺便说一下。您不使用JavaExec
类型的任务,而是使用javaExec
方法调用。只有在自定义任务中要执行更多操作时才有意义。如果你想要的只是java exec,你应该使用JavaExec
类型的任务。
我认为要获得所需的行为,您需要使用标准的Groovy方式来调用["java", "-jar", "your.jar", "your", "arguments"].execute()
之类的外部进程,并使用Process.waitForOrKill(long)等待一段时间然后终止该进程。
答案 1 :(得分:0)
最后我没有对我的任务实施任何时间限制,而是弄清楚为什么Randoop有时会“卡住”这么久(它正在测试一个只是睡觉的等待(......)方法)并设置Randoop省略了这种方法。