Python-Mock, der in einer Klasse mit zwei verschiedenen Dateien 'geöffnet' wurde

Ich habe Probleme, herauszufinden, wie zwei Dateiöffnungen in einer Klasse verspottet werden, wenn beide Kontext-Manager verwenden. Ich weiß, wie es mit dem Mock-Modul für eine kontextverwaltete Datei gemacht wird:

@patch('__builtin__.open')
def test_interface_mapping(self, mock_config):
        m = MagicMock(spec=file)
        handle = m.return_value.__enter__.return_value
        handle.__iter__.return_value = ('aa', 'bb')

Mein Problem ist, wie das gemacht wird, wenn eine Klasse zwei verschiedene Dateien im selben Aufruf öffnet. In meinem Fall ist die Klasse__init__() lädt die Dateien in zwei Maps vor. Diese Klasse wird in anderen Klassen verwendet. Ich möchte das Laden dieser beiden Dateien verspotten, um meine Testdaten bereitzustellen, damit die anderen Klassen, die das IfAddrConfig-Objekt verwenden, mit meinem vorinstallierten Inhalt der Testdatei getestet werden können.

Hier ist ein Beispiel für die Klasse, mit der ich zu kämpfen habe: Lädt zwei Dateien in__init__(), beide, die ich verspotten möchte, um meinen Test injizierten Akteninhalt zu laden. getInterfaceMap () ist die Funktion, die häufig aufgerufen wird, damit ich nicht möchte, dass die Dateien bei jedem Aufruf geladen und analysiert werden, daher der Grund für das Vorladen der Maps in__init__() Einmal

class IfAddrConfig(object):
    def __init__(self):
        # Initialize the static maps once since they require file operations
        # that we do not want to be calling every time getInterfaceMap() is used
        self.settings_map = self.loadSettings()
        self.config_map = self.loadConfig()

    def loadConfig(self):
        config_map = defaultdict(dict)
        with open(os.path.join('some_path.cfg'), 'r') as stream:
            for line in stream:
                # Parse line and build up config_map entries
        return config_map

    def loadSettings(self):
        settings_map = {}
        with open('another_path.cfg', 'r') as stream:
            for line in stream:
                # Parse line and build up settings_map entries
        return settings_map

    def getInterfaceMap(self, interface):
        # Uses both the settings and config maps to finally create a composite map
        # that is returned to called
        interface_map = {}
        for values in self.config_map.values():
            # Accesss self.settings_map and combine/compare entries with
            # self.config_map values to build new composite mappings that
            # depend on supplied interface value
        return interface_map