在SBT中使用"sbt testOnly"从jar运行测试?

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)

编辑

  1. 我创建了一个新文件夹
  2. 我添加build.sbt了以下内容:

    name := "abc"
    
    version := "1.0-SNAPSHOT"
    
    scalaVersion := "2.10.0"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我添加了lib文件夹并将我的测试jar复制到其中

  4. 我跑了 sbt testOnly Unit.*

  5. 它找不到任何测试

编辑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项目的根目录.再次,没有发现任何测试.

yǝs*_*ǝla 0

似乎 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 之前进行大量设置。