SBT清理钩子在测试中

时间:2012-03-27 16:36:55

标签: scala sbt

SBT有一个很好的钩子,允许你在所有测试运行后执行任意代码:

testOptions in Test += Tests.Cleanup( () => println("Cleanup"))

有效。 我的问题是:我想做一些实际的清理(例如停止一些服务)但我无法导入我在同一个构建文件中声明的任何依赖项。有没有办法做到这一点?我想我需要将这些放在sbt类路径上,但我似乎无法在文档中找到它。

P.S。我可能在错误的位置执行此操作,是否有更好的地方在所有测试运行后关闭事物?)

2 个答案:

答案 0 :(得分:8)

补充了venechka的答案:我正在使用Specs2运行集成测试,并且在规格中无法知道所有测试何时运行。所以我解决了它几乎就像venechka和你自己已经指出的那样,通过从项目中加载一个初始化时进行清理的类:


testOptions in IntegrationTest += Tests.Cleanup( (loader: java.lang.ClassLoader) => {
  loader.loadClass("com.mypackage.IntegrationTestCleanup").newInstance
} )

答案 1 :(得分:4)

您不能使用在项目中添加了libraryDependencies的类(您可以在项目/项目中添加libraryDependencies,但我不建议在2个位置添加)。相反,您可以调用项目源中的清理方法,并且可以访问声明的库依赖项。