Spark(scala)单元测试 - 模拟对象成员

时间:2015-09-29 01:36:57

标签: scala unit-testing junit apache-spark

我有一个涉及2个scala伴侣对象的spark应用程序,如下所示。

object actualWorker {
  daoClient

  def update (data, sc) {
    groupedData = sc.getRdd(data).filter. <several_operations>.groupByKey
    groupedData.foreach(x => daoClient.load(x))
  }
}


object SparkDriver {
  getArgs
  sc = getSparkContext
  actualWorker.update(data, sc : sparkContext)

}

我面临的挑战是为这个火花应用编写单元测试。我正在使用Mockito和ScalaTest,Junit进行这些测试。

在编写单元测试时,我无法模拟daoClient。 [编辑1:额外的挑战是我的daoClient不可序列化的事实。因为我在spark上运行它,所以我只是将它放在一个对象(不是类)中,它可以用于spark;但它使它不可单元测试]

我尝试了以下内容:

  1. 使ActualWorker成为可以在其中传递uploadClient的类 构造函数。创建一个客户端并在Actual Worker中实例化它 问题:任务不可序列化异常。
  2. 介绍上传客户端的特征。但是我仍然需要在SparkDriver中的某个时刻实例化一个客户端,我担心这会导致Task Not serializable异常。
  3. 此处的任何输入都将受到赞赏。

    PS:我对Scala很新,并且火花

1 个答案:

答案 0 :(得分:0)

虽然技术上不完全是一个单元测试框架,但我已经使用https://github.com/holdenk/spark-testing-base来测试我的Spark代码并且运行良好。