2016-07-19 5 views
3

에서 열린 파일 및 모든 예제 내가모의 나는 열린 모의 파일을 시도하고 파이썬

@patch('open', create=True) 

할 필요가 있음을 보여하지만

Need a valid target to patch. You supplied: 'open' 

가 계속 open의 전체 점선 경로이지만 그게 무엇인지 전혀 알지 못합니다. 사실, 그게 문제인지 나는 확신하지 못합니다.

+1

(1) 게시 한 내용에 따라 경로가 무엇인지 또는 문제인지 여부를 알 수 없습니다. [mcve]를 줘. 2.이 작업을 위해 특별히 ['mock_open'] (https://docs.python.org/3/library/unittest.mock.html#mock-open)이 있습니까? – jonrsharpe

답변

9

모듈 이름을 포함해야합니다. 스크립트에서 테스트하는 경우, 모듈의 이름은 __main__입니다 :

@patch('__main__.open') 

그렇지 않으면 테스트중인 코드가 들어있는 모듈의 이름 사용 : 그래서

@patch('module_under_test.open') 

을 코드하는 그 open() 내장을 사용하면 대신 패치 된 전역을 찾습니다.

참고 mock 모듈은 파일 데이터와 적절한 open() 전화를 구축 할거야 mock_open() utility와 함께 제공 :

@patch('__main__.open', mock_open(read_data='foo\nbar\nbaz\n')) 
+0

질문 더 : 그러한 모의 (지정된 return_value와 함께)가 컨텍스트 관리자로 사용될 수 있습니까 (with 문 내에서)? – 0xc0de

+0

@ 0xc0de : 예, 링크 된 문서에는'with '문과 함께 사용되며'mock_open()'으로 패치 된'open()'예제가 포함되어 있습니다. –

+0

예, 여기서 물어 본 후에 나중에 보았습니다. 감사. – 0xc0de

1

파이썬 3에서는 사용해야에서

@mock.patch("builtins.open", create=True)