【问题标题】:'Mock' object has no attribute '__getitem__'“模拟”对象没有属性“__getitem__”
【发布时间】:2017-02-23 14:03:04
【问题描述】:

按照Mocking a Dictionary with MagicMock 的示例后,我有以下模拟设置:

mock_writer = Mock()
mock_reader = Mock()
mock_format = Mock()
mock_option = Mock()
mock_load = MagicMock()

test_dict = {"Bus_No": Mock(), "Team_No": Mock()}

def getitem(name):
    return test_dict[name]

mock_load.__getitem__.side_effect = getitem

mock_option.load.return_value = mock_load
mock_format.option.return_value = mock_option
mock_reader.format.return_value = mock_format
mock_reader.write.return_value = mock_writer
mock_spark = Mock()
mock_spark.read.return_value = mock_reader

Driver(mock_spark).run()

这里是驱动类:

def __init__(self, spark):
    self.spark = spark

def run(self):

    partition_names = ["Bus_No", "Team_No"]

    df = self.spark.read\
        .format("com.databricks.spark.avro")\
        .option("avroSchema", schema)\
        .load("{0}{1}*.avro".format(job.SourcePath, os.path.sep))

    partition_columns = [df[x] for x in partition_names]

然后它返回这个错误:

partition_columns = [df[x] for x in partition_names]
TypeError: 'Mock' object has no attribute '__getitem__'

【问题讨论】:

  • 你指的 self.spark 对象是什么?
  • 这是对mock_spark 对象的引用。模拟被传递到类的__init__ 方法中,并在该方法中分配给self.spark

标签: python python-2.7 unit-testing


【解决方案1】:

事实证明,因为read 不是我不应该使用来自mock_spark.readreturn_value 的方法。变化如下:

mock_spark.read = mock_reader

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 2013-03-17
    • 2015-10-26
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2012-10-15
    • 2014-01-16
    相关资源
    最近更新 更多