【发布时间】:2018-09-04 03:45:42
【问题描述】:
我的 spark 应用程序中有一个从 MySQL 数据库加载数据的方法。该方法看起来像这样。
trait DataManager {
val session: SparkSession
def loadFromDatabase(input: Input): DataFrame = {
session.read.jdbc(input.jdbcUrl, s"(${input.selectQuery}) T0",
input.columnName, 0L, input.maxId, input.parallelism, input.connectionProperties)
}
}
该方法除了执行jdbc 方法并从数据库中加载数据之外什么都不做。我该如何测试这种方法?标准方法是创建对象session 的模拟,它是SparkSession 的一个实例。但由于 SparkSession 有一个私有构造函数,我无法使用 ScalaMock 模拟它。
这里的主要问题是我的函数是一个纯副作用函数(副作用是从关系数据库中提取数据),鉴于我在模拟 SparkSession 时遇到问题,我如何对这个函数进行单元测试。
那么有什么方法可以模拟 SparkSession 或任何其他比模拟测试此方法更好的方法吗?
【问题讨论】:
-
@himanshuIIITian 这不是那个问题的重复。我的问题非常具体到一个用例,我的方法只从数据库加载数据,如果可能的话,我如何使用模拟或任何其他方法对其进行测试。您链接的问题没有谈论如何模拟它或如何处理非常具体的场景..
-
好的!我认为它与它相似。为混乱道歉。
-
你到底想测试什么?如果查询可以执行?老实说,我不会测试这个方法,因为它不包含你实现的任何逻辑(没有冒犯)。您只是在运行 spark 提供的一些逻辑 - 这应该在他们这边进行测试。如果您仍然想对此进行测试,您可以使用嵌入式数据库。
-
还是我把你的问题弄错了,你问谁来创建一个 spark-session?给你:
SparkSession.builder().getOrCreate()
标签: scala unit-testing apache-spark mocking scalamock