2017-06-01 99 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