SBT - 如何使 InputTask 依赖于一个任务并最终完成另一个

Posted

技术标签:

【中文标题】SBT - 如何使 InputTask 依赖于一个任务并最终完成另一个【英文标题】:SBT - how to make an InputTask depend on one task and doFinally another 【发布时间】:2014-11-11 15:48:57 【问题描述】:

我们正在为一些自动化的 android UI 测试整合一个 SBT 版本。目的是启动 Appium 服务器,启动 Android 模拟器,运行测试,然后关闭一切。我们已经为“测试”SBT 命令提供了这个功能:

(test in Test) <<= 
  (stopVirtual, (test in Test), saveProcessVirtualKey)
  
    (stop, test, saveProcessVirtualKey) => test.dependsOn(saveProcessVirtualKey).doFinally(stop)
  

我们在尝试使用“testOnly”命令执行相同操作时遇到了问题,该命令应该接受一个字符串参数来指定要运行的特定测试。到目前为止,我们得到的是:

(testOnly in Test) <<=
  (stopVirtual, (testOnly in Test), saveProcessVirtualKey)
  
    (stop, test, saveProcessVirtualKey) => test.dependsOn(saveProcessVirtualKey).doFinally(stop)
  

真的,我们需要让 InputTask 依赖于 saveProcessVirtualKey 和 doFinally stopVirtual。这可能吗?

【问题讨论】:

【参考方案1】:

sbt 内置了test setup and cleanup。

使用Tests.SetupTests.Cleanup 指定设置和清理操作。它们接受() =&gt; Unit 类型的函数或ClassLoader =&gt; Unit 类型的函数。接受 ClassLoader 的变体被传递给(或曾经)用于运行测试的类加载器。它提供对测试类以及测试框架类的访问。

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

这行得通吗?

我第二次发这个帖子,因为我之前的回答被版主删除了。

【讨论】:

以上是关于SBT - 如何使 InputTask 依赖于一个任务并最终完成另一个的主要内容,如果未能解决你的问题,请参考以下文章

使 SBT 子项目任务依赖于另一个子项目任务

如何解决具有不同包装常春藤类型的sbt中的依赖关系?

多项目中的SBT测试依赖性:使测试代码可用于相关项目

IntelliJ 中 SBT 项目的未解析依赖路径

如何从特定项目的交叉构建的sbt多项目中删除scala版本

Sbt Plugin 添加依赖到 project/build.sbt