2017-06-01 97 views
1

文件在我的Python包,我有一個配置模塊,讀取YAML文件寫入時,在明確的位置(在創建實例時),即像懲戒在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()) 

現在我該怎麼辦我的單元測試如果我不想使用明確指定的文件?相反,我想創建一個用於測試的臨時config.yml

我可以簡單地允許在__init__()中指定的文件名,但我強烈希望強制文件名的位置。即像這樣

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()) 

是否有其他方法可以解決我的問題?我想這可能是正確的使用mock?也可隨意對上漲和下跌發表任何評論。

+0

你需要一些具體的內容在該文件中,或者你只是YAML輸出需要一個虛擬的臨時文件? – lapinkoira

+0

是我在單元測試中指定的一些yaml內容 –

回答

0

你需要運行模擬上下文中的測試:

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: 

您可能需要使用庫YAML來生成的read_data