2017-06-01 7 views
1

In meinem Python-Paket Mocking habe ich ein Konfigurationsmodul, das eine YAML-Datei liest an einer expliziten Stelle (bei der Erstellung der Instanz), also so etwas wieeine Datei in Python

class YamlConfig(object): 

    def __init__(self): 

     filename = os.path.join(os.path.expanduser('~'), '.hanzo\\config.yml') 

     with open(filename) as fs: 
      self.cfg = yaml.load(fs.read()) 

Nun, was soll ich tun, wenn das Schreiben mein Unit-Test, wenn ich die explizit angegebene Datei nicht verwenden möchte? Stattdessen möchte ich ein temporäres config.yml erstellen, das für das Testen verwendet wird.

Ich könnte einfach für einen angegebenen Dateinamen in __init__() zulassen, aber ich bevorzuge stark den Dateinamen Speicherort. I.e. wie dieser

class YamlConfig(object): 

    def __init__(self, filename=os.path.join(os.path.expanduser('~'), '.hanzo\\config.yml')): 

     with open(filename) as fs: 
      self.cfg = yaml.load(fs.read()) 

Gibt es andere Möglichkeiten, um mein Problem zu lösen? Ich denke, es könnte möglich sein, mit mock richtigen Weg? Fühlen Sie auch frei, irgendwelche Anmerkungen über Oberseite und Unterseite zu geben.

+0

Müssen Sie einige spezifische Inhalte in dieser Datei oder Sie gerade zu erzeugen Brauchen Sie eine virtuelle temporäre Datei? – lapinkoira

+0

Ja, einige YAML-Inhalte, die ich in meinem Komponententest angegeben habe –

Antwort

0

Sie müssen den Test in den mock Kontext auszuführen:

import unittest.mock as umock 

with umock.patch('__main__.open', umock.mock_open(read_data='yaml data')): 
    # Run your test here and open the file 
    with open('filename') as f: 

Sie benötigen Bibliothek yaml verwenden yaml Ausgang für read_data