【发布时间】: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