首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python测试Parquet

用Python测试Parquet
EN

Stack Overflow用户
提问于 2019-10-03 13:52:46
回答 1查看 1.3K关注 0票数 0

我试图模拟parquet并断言它是用正确的路径调用的,但是在正确地模拟它时遇到了问题。如何模拟option函数以返回模拟的parquet

测试中的代码

代码语言:javascript
复制
def read_from_s3(spark, path):
    return spark.read.option('mergeSchema', 'true').parquet(path)

测试

代码语言:javascript
复制
import unittest
import mock
from src.read_from_s3 import read_from_s3


class TestReadFromS3(unittest.TestCase):
    def test_read_from_s3__called_with_correct_params(self):
        spark = mock.MagicMock()
        spark.read.option = mock.MagicMock()
        spark.read.option.parquet = mock.MagicMock()
        path = 'my_path'

        read_from_s3(spark, path)

        spark.read.option.assert_called_with('mergeSchema', 'true') # this passes
        spark.read.option.parquet.assert_called_with(path) # this fails

测试失败

代码语言:javascript
复制
AssertionError: Expected 'parquet' to have been called once. Called 0 times.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-03 14:08:26

parquet不是spark.read.option的属性;它是option返回值的属性。此外,您不需要显式地创建模拟;在模拟上的属性查找也会返回模拟。

代码语言:javascript
复制
def test_read_from_s3__called_with_correct_params(self):
    spark = mock.MagicMock()
    read_from_s3(spark, path)
    spark.read.option.assert_called_with('mergeSchema', 'true')
    spark.read.option.return_value.parquet.assert_called_with(path)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58220655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档