我正在尝试执行sbt任务中主项目中的代码:
lazy val disconnectClients = taskKey[Unit]("Disconnect postgres clients after tests.")
disconnectClients := {
(testLoader in Test).value
.loadClass("com.companyname.DBDisconnector")
.getMethod("close")
.invoke(null).asInstanceOf[Unit]
}
DBDisconnector:
class DBDisconnector {
...
def close(): Unit = {
println("-------> DISCONNECT <--------")
ds.close()
}
}
但是什么也没发生。 我究竟做错了什么 ?谢谢!
答案 0 :(得分:1)
将实例化的对象而不是invoke
传递给null
lazy val disconnectClients = taskKey[Unit]("Disconnect postgres clients after tests.")
disconnectClients := {
val loader = (testLoader in Test).value
val cls = loader.loadClass("example.DBDisconnector")
val disconnector = cls.newInstance()
cls.getMethod("close").invoke(disconnector)
}
Tests.Cleanup
是实现类似清理的另一种方法:
testOptions in Test += Tests.Cleanup { loader =>
val cls = loader.loadClass("example.DBDisconnector")
val disconnector = cls.newInstance()
cls.getMethod("close").invoke(disconnector)
}