>  기사  >  백엔드 개발  >  Python에서 Mock을 사용하여 \"with\" 문에서 \"open\" 핸들을 모의하는 방법은 무엇입니까?

Python에서 Mock을 사용하여 \"with\" 문에서 \"open\" 핸들을 모의하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-20 16:24:02690검색

How to Mock the

Python에서 Mock을 사용하여 With 문에서 열린 핸들 모의

with 문과 파일 연산을 활용하는 코드에 대한 단위 테스트를 작성할 때, 테스트된 코드의 동작을 분리하려면 열린 핸들을 조롱하는 것이 필요합니다. Python에서 Mock 프레임워크를 사용하여 이를 달성하는 방법은 다음과 같습니다.

Python 3

unittest.mock 모듈을 사용하면 open과 같은 내장 함수를 패치할 수 있습니다. 방법은 다음과 같습니다.

<code class="python">from unittest.mock import patch, mock_open

with patch("builtins.open", mock_open(read_data="data")) as mock_file:
    assert open("path/to/open").read() == "data"
mock_file.assert_called_with("path/to/open")</code>

Python 2

Python 2의 경우 구문이 약간 다릅니다. buildins.open을 패치하는 대신 __buildin__.open을 패치하고 모의 파일을 별도로 가져와야 합니다.

<code class="python">import mock

with mock.patch("__builtin__.open", mock_open(read_data="data")) as mock_file:
    assert open("path/to/open").read() == "data"
mock_file.assert_called_with("path/to/open")</code>

데코레이터로 패치

패치를 사용할 수도 있습니다. 더 깔끔한 구문을 위한 데코레이터. 그러나 패치의 new= 인수에 mock_open의 결과를 직접 사용하는 것은 까다로울 수 있습니다. 대신 문서에 설명된 대로 new_callable= 인수를 활용하세요.

<code class="python">@patch("builtins.open", new_callable=mock_open, read_data="data")
def test_patch(mock_file):
    assert open("path/to/open").read() == "data"
    mock_file.assert_called_with("path/to/open")</code>

참고: 이 경우 패치된 개체가 테스트에 인수로 전달된다는 점을 명심하세요. 기능입니다.

위 내용은 Python에서 Mock을 사용하여 \"with\" 문에서 \"open\" 핸들을 모의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.