我有一个应用程序,当执行main方法时,它启动一个Web服务器来托管一些RESTful服务(使用Dropwizard)。我正在尝试编写访问HTTP方法的测试(而不是Java方法),因此测试具有服务器运行的先决条件。
这是执行应用程序并启动Web服务器的任务:
task run (dependsOn: 'classes', type: JavaExec) {
main = 'com.some.package.to.SomeService'
classpath = sourceSets.main.runtimeClasspath
args 'server', 'some.yml'
}
服务器也需要几秒钟才能启动。粗略地说,我想要做的是这样的事情:
test.doFirst {
println "Starting application..."
Thread.startDaemon {
// What goes here???
}
sleep 20000
println "Application should be started."
}
换句话说,在运行测试之前,在一个单独的线程中启动应用程序并等待一段时间再运行测试,让它有时间完成启动。
那就是说,我无法弄清楚Thread.startDaemon(tasks.run.execute()
不起作用)的内容,也不知道这是否是最好的方法。什么是最好的解决方法?
谢谢!
答案 0 :(得分:1)
我可能会做的是这样的事情:
task startServer (type: Exec) {
workingDir 'tomcat/bin'
// using START hopefully forks the process
commandLine 'START', 'start.bat'
standardOutput = new ByteArrayOutputStream()
ext.output = {
return standardOutput.toString()
}
// loop through output stream for finished flag
// or just put a timeout here
}
task testIt (type: Test) {
description "To test it."
include 'org/foo/Test*.*'
}
然后,在调用Gradle目标时,调用“gradle.bat startServer testIt”。这是基本的想法。