【发布时间】:2020-04-20 14:35:26
【问题描述】:
我想测试一个我们拥有的方法,其格式如下:
def extractTable( spark: SparkSession, /* unrelated other parameters */ ): DataFrame = {
// Code before that I want to test
val df = spark.read
.format("jdbc")
.option("url", "URL")
.option("driver", "<Driver>")
.option("fetchsize", "1000")
.option("dbtable", "select * from whatever")
.load()
// Code after that I want to test
}
我正在尝试制作 spark 对象的存根,以及 read 和 option 方法返回的 DataFrameReader 对象:
val sparkStub = stub[ SparkSession ]
val dataFrameReaderStub = stub[ DataFrameReader ]
( dataFrameReaderStub.format _).when(*).returning( dataFrameReaderStub ) // Works
( dataFrameReaderStub.option _).when(*, *).returning( dataFrameReaderStub ) // Error
( dataFrameReaderStub.load _).when(*).returning( ??? ) // Return a dataframe // Error
( sparkStub.read _).when().returning( dataFrameReaderStub )
但我在dataFrameReaderStub.option 和dataFrameReaderStub.load 上收到一条错误消息,上面写着“无法解析符号选项”和“无法解析符号加载”。但是这些方法肯定存在于spark.read 返回的对象上。
我该如何解决这个错误,或者有没有更好的方法来模拟/测试我的代码?
【问题讨论】: