class Test{
override def execute(sqlContext: SQLContext) {
val df: DataFrame = sqlContext.read.parquet(path)
}
如何模仿sqlcontext.read.parquet?需要从json中读取并在调用时返回伪Dataframe
class XTest extends FunSuite with MockitoSugar {
test("Test") {
val sparkSession = SparkSession
.builder()
.master("local[*]")
.appName("View_Persistence_Spark_Job")
.getOrCreate()
sparkSession.sparkContext.setLogLevel("ERROR")
val test = new Test()
val df_from_json = sparkSession.read.option("multiline", "true").json("src/test/resources/test.json")
val mockContext = mock[SQLContext]
when(mockContext.read.parquet("src/test/resources/test.json")).thenReturn(df_from_json)
test.execute(sparkSession.sqlContext)
1条答案
按热度按时间tuwxkamq1#
有两个问题需要从你的例子中理解。
首先,在使用mock时不能连接调用。尝试:
总是会失败因为结果
mockContext
不实现方法read,因此将导致空引用异常。为了解决这个问题,我们需要添加另一个mock,这将是mockContext.read
. 因此,这一部分将是:第二件事,为了
test
用那个嘲弄,你要把它传给他,而不是sparkSession.sqlContext
,这不是一个mock,因此不能重写它的行为。综上所述,完整的测试将是: