具有主要功能的scala测试
scala test with main function
我写了一个简单的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
方法returnsUnit
(它的签名是def main(args: Array[String]): Unit
),所以用这个方法测试"returned"是什么感觉有点奇怪。
在这里,你只是在做一个 println
,所以如果你真的想检查结果是否打印出来,你应该按照 @JoelBerkeley 在他的评论中给出的 link 进行操作:Scalatest - how to test println。但是,只测试直接打印的结果不是一个好的做法:您应该测试您的方法返回的内容,而不是只是结果正确打印的事实。
在大多数情况下,您不需要测试 main
方法,因为它只是您程序的入口点。恕我直言,main
方法应该只创建一个 class(例如 SparkProgram
)的实例来进行处理,仅此而已(参见 我完全同意)。 class 中的方法必须独立于您的 main
进行测试。您的 main
方法应该尽可能短:没有业务逻辑,只是将工作委托给 classes,方法返回非 Unit
可以测试的结果。
我写了一个简单的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
方法returnsUnit
(它的签名是def main(args: Array[String]): Unit
),所以用这个方法测试"returned"是什么感觉有点奇怪。
在这里,你只是在做一个 println
,所以如果你真的想检查结果是否打印出来,你应该按照 @JoelBerkeley 在他的评论中给出的 link 进行操作:Scalatest - how to test println。但是,只测试直接打印的结果不是一个好的做法:您应该测试您的方法返回的内容,而不是只是结果正确打印的事实。
在大多数情况下,您不需要测试 main
方法,因为它只是您程序的入口点。恕我直言,main
方法应该只创建一个 class(例如 SparkProgram
)的实例来进行处理,仅此而已(参见 main
进行测试。您的 main
方法应该尽可能短:没有业务逻辑,只是将工作委托给 classes,方法返回非 Unit
可以测试的结果。