SBT在完成测试时断开数据库客户端的连接

时间:2019-04-30 10:24:44

标签: scala sbt

我正在尝试执行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()
  }
}

但是什么也没发生。 我究竟做错了什么 ?谢谢!

1 个答案:

答案 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)
}