带主函数的scala测试

带主函数的scala测试,scala,scalatest,Scala,Scalatest,我编写了一个简单的Scala代码来练习Scala测试: object Job { def main(args: Array[String]) = { val sc = new SparkContext() println(reduceWithSum(sc)) } def reduceWithSum(sc: SparkContext): MyClass = { val data = Array(1, 2, 3, 4, 5)

我编写了一个简单的Scala代码来练习Scala测试:

object Job {
    def main(args: Array[String]) = {
      val sc = new SparkContext()
      println(reduceWithSum(sc))
    }

    def reduceWithSum(sc: SparkContext): MyClass = {
      val data = Array(1, 2, 3, 4, 5)
      val distData = sc.parallelize(data)
      val distDataValue = distData.map(MyClass(_))

      distDataValue.reduce(MyClass.sum)
    }
}
我知道为reduceWithSum()编写测试代码很容易,但为main()编写测试代码似乎很难。有什么提示吗

以下是我编写的测试代码示例:

class JobTest extends FlatSpec with Matchers {
    val conf = new SparkConf().setMaster("local[*]").setAppName("Test")
    val testSc = new SparkContext(conf)

    it should "reduce correctly" in {
      Job.reduceWithSum(testSc) shouldBe MyClass(15)
    }

main
方法返回
Unit
(其签名是
defmain(args:Array[String]):Unit
),因此测试此方法“返回”的内容有点奇怪

在这里,您正在执行一个
println
,因此如果您真的想检查结果是否已打印,您应该遵循@JoelBerkeley在其评论中给出的链接:。然而,仅仅测试直接打印的结果并不是一种好的做法:您应该测试方法返回的内容,而不是测试结果是否正确打印的事实


在大多数情况下,您不需要测试
main
方法,因为它只是程序的入口点。总之,
main
方法应该只创建一个类的实例(例如,
SparkProgram
)来进行处理,就是这样(请看我完全同意)。该类中的方法必须独立于
main
进行测试。你的
main
方法应该尽可能短:没有业务逻辑,只是将工作委托给类,方法返回可以测试的非
Unit
结果。

main
方法返回
Unit
(其签名是
defmain(args:Array[String]):Unit,因此,测试这个方法“返回”的内容有点奇怪

在这里,您正在执行一个
println
,因此如果您真的想检查结果是否已打印,您应该遵循@JoelBerkeley在其评论中给出的链接:。然而,仅仅测试直接打印的结果并不是一种好的做法:您应该测试方法返回的内容,而不是测试结果是否正确打印的事实


在大多数情况下,您不需要测试
main
方法,因为它只是程序的入口点。总之,
main
方法应该只创建一个类的实例(例如,
SparkProgram
)来进行处理,就是这样(请看我完全同意)。该类中的方法必须独立于
main
进行测试。你的
main
方法应该尽可能短:没有业务逻辑,只是将工作委托给类,方法返回非
Unit
可以测试的结果。

可能重复Hey,我认为这是一个不同的问题,只需编辑它并发布更多建议。你的问题是如何测试泛型主函数吗?是的,在我的情况下,如果我做Job.main()应该是MyClass(15),我会看到错误,因此非常困惑如何测试这种情况。可能是重复的嘿,我认为这是一个不同的问题,只需编辑它并发布更多建议。您的问题是如何测试泛型主函数吗?是的,在我的情况下,如果我执行Job.main()应该是MyClass(15),我会看到错误,因此非常困惑如何测试此类情况。