0
Nachdem nach dem Beispiel Mocking a Dictionary with MagicMock ich habe folgenden Mock-Setup:'Mock' Objekt hat kein Attribut '__getitem__'
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()
Und hier die Fahrer-Klasse ist:
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]
Und es gibt dann Dieser Fehler:
partition_columns = [df[x] for x in partition_names]
TypeError: 'Mock' object has no attribute '__getitem__'
Was ist das self.spark-Objekt, auf das Sie sich beziehen? –
Es ist ein Verweis auf das 'mock_spark' -Objekt. Der Mock wird in die Methode "__init__" der Klasse übergeben, in der er "self.spark" zugewiesen ist. –