如果是這樣,怎麼樣?我還沒有遇到適當的咒語。我可以運行JUnit 4從命令行測試Scala代碼嗎?
如果不是,從命令行單元測試Scala代碼的最佳方法是什麼? (我是troglodyte;我必須使用IDE,但我更喜歡使用Emacs和命令行工具。)
如果是這樣,怎麼樣?我還沒有遇到適當的咒語。我可以運行JUnit 4從命令行測試Scala代碼嗎?
如果不是,從命令行單元測試Scala代碼的最佳方法是什麼? (我是troglodyte;我必須使用IDE,但我更喜歡使用Emacs和命令行工具。)
由於編譯好的Scala只是Java字節碼(好的,在類名中有更多的$字符),它就像對Java代碼運行JUnit 4測試一樣,也就是從命令行傳遞測試類作爲參數org.junit.runner.JUnitCore
。由於JUnit 4開箱即用,只有命令行支持,所以您甚至不必擔心抑制基於GUI的測試運行器。這就是說,特定的Scala測試框架(ScalaTest,ScalaCheck)確實提供了一種更習慣的集合方法來測試用這種更多功能語言編寫的代碼。
對於這個問題,ScalaTest或任何其他Scala特定框架的建議非常好。不過,我想指出其他的東西。
SBT。
SBT是一個構建工具,如Ant,Maven或Make。它的一個有趣的方面,這對我們很重要,它是基於Scala的。我不是說它具有處理Scala代碼的特殊功能,或者它是用Scala編寫的,儘管這些都是真實的。我的意思是它使用Scala代碼,而不是像Maven和Ant這樣的XML作爲配置源。
這本身就很有趣。就在今天,我看到了一個將測試資源與程序源分離的美好例子,我只是在這裏發佈它,因爲它很酷。
// on this project we keep all sources, whether they be Scala or Java, and whether they be
// regular classes or test classes, in a single src tree.
override def mainScalaSourcePath = "src"
override def mainJavaSourcePath = "src"
override def testScalaSourcePath = "src"
override def testJavaSourcePath = "src"
override def mainResourcesPath = "resources"
// distinguish main sources from test sources
def testSourceFilter =
"Test*.scala" | "Test*.java" |
"AbstractTest*.scala" | "AbstractTest*.java" |
"ScalaTestRunner.scala"
def mainSourceFilter = ("*.scala" | "*.java") - testSourceFilter
override def mainSources = descendents(mainSourceRoots, mainSourceFilter)
override def testSources = descendents(testSourceRoots, testSourceFilter)
但是,更令人感興趣的是SBT就像一個控制檯一樣工作。你運行「sbt」,然後你就進入了一個類似控制檯的界面,你可以從這個界面中輸入命令,比如「test」,並讓你的測試運行。