use*_*128 6 scala sbt scalatest
作为CI设置的一部分,第一步是使用SBT创建包/罐dist.以下步骤是使用dist-created jar 运行单元,集成和功能测试.
是否有可能用SBT做到这一点?
通常我会使用sbt testOnly "Unit.*",但这在项目的上下文中有效.我找不到任何文档显示如何在已经有jar的情况下执行此操作.
我正在使用ScalaTest,我知道有一个跑步者,我可以使用http://www.scalatest.org/user_guide/using_the_runner.但是如果可能的话,使用SBT会更简单.
举个例子,我正在寻找这样的东西:
sbt testOnly "Unit.* -jar myjar.jar"
Run Code Online (Sandbox Code Playgroud)
当我使用以下内容时,我的测试是否会包含在jar中:
sbt dist
Run Code Online (Sandbox Code Playgroud)
?
编辑
我添加build.sbt了以下内容:
name := "abc"
version := "1.0-SNAPSHOT"
scalaVersion := "2.10.0"
Run Code Online (Sandbox Code Playgroud)我添加了lib文件夹并将我的测试jar复制到其中
我跑了 sbt testOnly Unit.*
它找不到任何测试
编辑2
我尝试使用以下"正确"的SBT文件:
name := "ihs2tests"
version := "1.0-SNAPSHOT"
scalaVersion := "2.10.0"
unmanagedBase in Test := new java.io.File(".")
Run Code Online (Sandbox Code Playgroud)
并移入test.jar项目的根目录.再次,没有发现任何测试.
似乎 SBT 无法在没有任何额外/手动设置的情况下读取 jar 文件 - 我可能是错的,但我在文档中没有找到任何内容。所以我尝试了这样的方法来使任务更简单:
unzip some-test.jar
java -jar sbt-launch.jar \
'set scalaSource in Test := new java.io.File(".")' \
'set fullClasspath in Test += Attributed.blank(file("."))' \
'test'
Run Code Online (Sandbox Code Playgroud)
运行没有错误,但没有找到测试。
如果我添加'set includeFilter in (Test, unmanagedSources) := "*Suite*.class"'强制它查找测试,它显然会失败,因为它需要*.scala文件,而不是编译的*.class文件。
我不是 SBT 专家,但我认为这一定接近解决方案。必须有一种方法以编程方式从 jar 路径读取所有文件,然后告诉测试框架使用*.class文件。
此时,使用 Scalatest 测试运行程序或使用项目从 sbt 运行测试似乎更合理。
如果您想深入了解,请查看 SBT 源代码和默认sbtshell 脚本,该脚本在运行 sbt 启动器 jar 之前进行大量设置。