둘 다 문맥 관리자를 사용할 때 클래스에서 두 개의 파일 열기를 모의하는 방법을 알아 내는데 어려움이 있습니다. 나는이 같은 모의 모듈을 사용하여 하나의 상황 관리 파일을 수행하는 방법을 알고Python 모의이 두 개의 다른 파일을 사용하는 클래스에서 '열기'
@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')
내 문제는 클래스가 같은 전화에 두 개의 서로 다른 파일을 열 때이 작업을 수행하는 방법이다. 필자의 경우, 클래스 __init__()
은 두 개의 맵으로 파일을 미리로드합니다. 이 클래스는 다른 클래스에서 사용됩니다. IfAddrConfig 객체를 사용하는 다른 클래스를 미리로드 된 테스트 파일 내용에 대해 테스트 할 수 있도록 내 테스트 데이터를 제공하기 위해이 두 파일 로딩을 모의하고 싶습니다.
다음은 두 개의 파일을 __init__()
에로드합니다. 두 파일 모두 테스트 대상 파일 내용을로드하려고 모의하고 싶습니다. getInterfaceMap()은 자주 호출되는 함수이므로 호출 할 때마다 파일을 파싱하고 파싱하지 않으므로 __init__()
에 맵을 미리로드해야합니다. open()
가 호출로
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
고마워요! 이 대답은 정확하고 도움이됩니다. – chromeeagle
@Mark 유용한 경우 +1을 잊지 마세요 :) –
Thank you! 제 질문은 달라졌습니다. 어떻게''f : line in f : ...' '와 같이''파일명을 열어서' ''내가 모의합니까? 불행히도'mock_open'은 반복에 대해서는 아무 것도하지 않습니다. –