通常我使用sbt testOnly「Unit。*」,但它適用於項目環境。當已經有一個jar時,我找不到任何文檔顯示如何做到這一點。
在SBT的test
- 家庭任務(與testOnly
爲例)與compile
的任務,通過sbt.inc.Analysis
實例返回編譯的文件列表一起工作。我無法弄清楚如何修改它並將已更改的Analysis實例注入testOnly
,以便知道我要運行的測試是否存在。
我正在提出另一個解決方案 - 一個把戲。
封裝測試類的罐子test:package
任務如下:
[test-lib]> test:package
[info] Updating {file:/Users/jacek/sandbox/so/test-lib/}test-lib...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 1 Scala source to /Users/jacek/sandbox/so/test-lib/target/scala-2.10/test-classes...
[info] Packaging /Users/jacek/sandbox/so/test-lib/target/scala-2.10/test-lib_2.10-0.1-SNAPSHOT-tests.jar ...
[info] Done packaging.
[success] Total time: 9 s, completed Mar 4, 2014 11:34:13 PM
當你有試驗瓶,你可以執行命令行的測試框架,而不 SBT(我假設你使用ScalaTest給出了scalatest標籤,但我將使用Specs2)。請閱讀測試框架的文檔,瞭解如何使用它,對於Specs2,請參閱Console output中描述的specs2.run
。
從測試jar執行測試需要定義一個合適的CLASSPATH,這個合適的CLASSPATH可能很容易或不太容易。這就是SBT可以提供很大幫助的地方 - 管理依賴性和CLASSPATH。
創建另一個SBT項目並將測試罐保存在lib
子目錄中以使其位於CLASSPATH上(如Unmanaged dependencies中所述)。
lib中的依賴關係發生在所有類路徑上(用於編譯,測試,運行和控制檯)。
添加樣例build.sbt
您將測試框架定義爲項目的依賴項。對於Specs2它是如下(I用作the Specs2 home page描述的默認配置):
libraryDependencies += "org.specs2" %% "specs2" % "2.3.8" % "test"
scalacOptions in Test ++= Seq("-Yrangepos")
訣竅是執行主類的測試框架,例如的specs2.run
for Specs2,好像該類是在命令行上執行的。 SBT幫助test:runMain
。
[my-another-project]> test:runMain specs2.run HelloWorldSpec
[info] Running specs2.run HelloWorldSpec
HelloWorldSpec
The 'Hello world' string should
+ contain 11 characters
+ start with 'Hello'
+ end with 'world'
Total for specification HelloWorldSpec
Finished in 62 ms
3 examples, 0 failure, 0 error
Exception: sbt.TrapExitSecurityException thrown from the UncaughtExceptionHandler in thread "run-main-0"
[success] Total time: 5 s, completed Mar 4, 2014 11:15:14 PM
不要擔心這個Exception
因爲它來自SBT映入從Specs2 exit
(測試執行後),以便SBT仍然向上。
這應該有助於你開始:http://stackoverflow.com/a/16409096/2197460。 –
測試代碼通常不會包含在'dist' jar文件中,但@DaveSwartz的鏈接可能對此有所幫助。 –
'sbt test:dist'呢?這不包括在(測試)dist jar中的測試嗎? –