2011-11-11 2 views
7

파일에 문자열을 써야하는 로거 클래스가 있습니다. 그래서 저는 이렇게하는 방법이 있습니다 :write()에 대한 모의 호출

def write_to_file(self, string): 
    self.__file_handle.write(string) 

오류 처리가 편집되었습니다. 필자는 파일에 쓰지 않고 이것을 테스트하고 싶습니다. 따라서 Mock을 통한 모의. 나는 열어서 조롱하는 방법을 설명하는 this을 보았지만 여기서는 도움이되지 않습니다 - __init__에 file_handle을 엽니 다. 이제 setUp()에서 할 수 있지만 mock_open은 setUp 이후에 범위를 벗어나는 것으로 보이므로 테스트 케이스에서는 아무 쓸모가 없습니다.

Mock을 사용하여 write_to_file 메소드를 테스트하는 테스트 메소드를 작성 하시겠습니까?

답변

1

__file_handle__init__으로 변경할 수 있습니다. 이것을 .write 서명이있는 가짜/위조 개체로 바꾸는 것처럼 그것에 쓰여진 내용을 테스트 할 수 있습니다.

아마 __file_handle을 설정 한 다음이 테스트 방법을 덮어 쓰는 방법을 만들면됩니까?

from mock import patch 

def setUp(self): 
    [...] 
    mock_file_handle = Mock() 
    with patch('__builtin__.open') as mock_file_handle: 
     self.sut = Logger() 
    [...] 

def test_write(self): 
    [...] 
    self.sut.write_message_to_file("ook?") 
    self.assertTrue(self.sut.file_handle.write.called) 
    self.assertTrue(self.sut.file_handle.flush.called) 
    [...] 

사람이 더 나은 솔루션이있는 경우

은 알려 주시기 바랍니다

+0

그건 편도입니다. 그러나 .write()도 모방 할 수 있어야합니다. – Sardathrion

3

간단한 정말 ... 내가 여기에 구글에서 도달

관련 문제