带主函数的scala测试
我编写了一个简单的Scala代码来练习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)
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),我会看到错误,因此非常困惑如何测试此类情况。