繁体   English   中英

我可以运行JUnit 4从命令行测试Scala代码吗?

[英]Can I run JUnit 4 to test Scala code from the command line?

如果是这样,怎么办? 我还没有遇到合适的咒语。

如果没有,从命令行对Scala代码进行单元测试的最佳方法是什么? (我是穴居人;我必须使用IDE,但是我更喜欢使用Emacs和命令行工具。)

由于编译后的Scala只是Java字节码(好的,类名中带有更多的$字符),因此与针对Java代码运行JUnit 4测试完全相同,即从命令行通过将测试类作为参数传递给org.junit.runner.JUnitCore 由于开箱即用的JUnit 4仅具有命令行支持,因此您甚至不必担心抑制基于GUI的测试运行程序。

也就是说,特定的Scala测试框架(ScalaTest, ScalaCheck )确实提供了一种更加惯用的集合方法来测试用这种功能更强的语言编写的代码。

您可能对ScalaTest感兴趣。

ScalaTest是一个免费的开源测试工具,适用于Scala和Java程序员。 它是用Scala编写的,使您可以用Scala编写测试以测试Scala或Java代码。 它是根据Apache 2.0开源许可证发行的。 由于不同的开发人员采用不同的方法来创建软件,因此没有一种测试方法适合每个人。 鉴于这种现实,ScalaTest旨在促进不同的测试样式。

有关如何从命令行运行测试的信息,请参阅Runner文档。

就此而言,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”之类的命令并运行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM