首页 > 解决方案 > 为不带参数的 spark scala 函数编写单元测试?

问题描述

我正在编写 scala 函数的单元测试,其中我将模拟的 spark 数据帧传递给函数,然后使用assertSmallDataFrameEquality(actualDF, expectedDF)函数来检查我的函数是否正确转换。

最近我遇到了一个不带参数并返回 Column 类型的函数。现在因为它不期待任何争论。我应该如何为这个函数编写测试用例。我的功能如下。

def arriveDateMinusRuleDays: Column = {
  expr(s"date_sub(${Columns.ARRIVE_DATE},${Columns.RULE_DAYS})")
}

测试蓝图写在下面

test("arrive date minus rule days") {
  import spark.implicits._
  val today = Date.valueOf(LocalDate.now)

  val inputDF = Seq(
    (Y, today, 0, 80852),
    (S, today, 1, 18851))
    .toDF(FLAG, ARRIVE_DT, RULE_DAYS,ITEM_NBR)

  val actualOutput = DataAggJob.arriveDateMinusRuleDays()   // How to pass my column values to this function
// val exepectedoutput
 assertmethod(actualoutput, expectedoutput)
//  print(actualOutput)
}

标签: scalaapache-spark

解决方案


您不需要测试每个单独的功能。单元测试的目的是断言实现和下游消费者之间的契约,而不是实现细节。

如果您的作业在给定输入的情况下返回预期的输出,那么无论该特定功能在做什么,它都可以正常工作。它真的应该保密以避免混淆,


推荐阅读