파이썬으로 테스트 할 때 신뢰할 수 있고 고립 된 테스트가 중요합니다. 일반적인 과제 중 하나는 테스트 중에 물체와 기능의 동작을 조롱하거나 수정하는 방법입니다. 이곳은 Pytest Monkeypatch Fixture가 빛나는 곳입니다. 테스트 중에 코드의 일부를 동적으로 교체하는 유연한 방법을 제공합니다.
이 블로그에서는 MonkeyPatch의 힘, 유용한 이유 및 깨끗하고 효과적인 테스트를 작성하는 방법을 탐색 할 것입니다.
Pytest의 Monkeypatch 비품을 사용하면 다음을 수정하거나 교체 할 수 있습니다.
이 동적 수정은 일시적이며 테스트 범위에만 적용되므로 테스트가 끝나면 원래 동작이 복원되도록합니다. 이렇게하면 MonkeYpatch가 영구적으로 변경되지 않고 특정 조건에서 조롱, 의존성을 재정의하거나 테스트 코드에 특히 유용합니다.
MonkeyPatch가 테스트를 단순화 할 수있는 몇 가지 주요 시나리오가 있습니다.
외부 API에 의존하는 함수가 있다고 가정합니다 :
# my_app.py def fetch_data(): # Simulate an API call return "Real API Response"# my_app.py def fetch_data () : # API 호출을 시뮬레이션합니다 "실제 API 응답"반환
실제로 API를 호출하지 않고 논리를 테스트하려면 fetch_data를 조롱 할 수 있습니다 :
# my_app.py def fetch_data(): # Simulate an API call return "Real API Response"# test_my_app.py my_app import에서 fetch_data에서 def test_fetch_data (monkeypatch) : def mock_fetch_data () : "조롱 된 응답"반환 monkeypatch.setattr ( "my_app.fetch_data", mock_fetch_data) assert fetch_data () == "조롱 된 응답"
환경 변수에 의존하는 함수를 테스트하고 있다고 상상해보십시오 :
# my_app.py def fetch_data(): # Simulate an API call return "Real API Response"# config.py OS 가져 오기 def get_database_url () : return os.getenv ( "database_url", "default_url")
monkeypatch를 사용하여 다른 환경을 시뮬레이션 할 수 있습니다.
# my_app.py def fetch_data(): # Simulate an API call return "Real API Response"# test_config.py config import get_database_url에서 def test_get_database_url (monkeypatch) : monkeypatch.setenv ( "database_url", "mocked_url") Assert get_database_url () == "mocked_url"
클래스 내에서 메소드를 일시적으로 교체 해야하는 경우 :
# my_app.py def fetch_data(): # Simulate an API call return "Real API Response"# my_class.py 수업 계산기 : def add (self, a, b) : a b
조롱 된 방법으로 동작을 테스트하십시오 :
# my_app.py def fetch_data(): # Simulate an API call return "Real API Response"# test_my_class.py my_class 가져 오기 계산기에서 def test_calculator_add (monkeypatch) : def mock_add (self, a, b) : 반환 42 monkeypatch.setattr (계산기, "add", mock_add) calc = calculator () calc.add (1, 2) == 42를 주장하십시오
특정 시나리오를 위해 내장 기능을 조롱 할 수도 있습니다.
# my_app.py def fetch_data(): # Simulate an API call return "Real API Response"# my_module.py def is_file_openable (filename) : 노력하다: Open (filename, "r")을 사용하여 : 진실을 반환하십시오 ioerror를 제외하고 : 거짓을 반환하십시오
다른 행동을 시뮬레이션하기 위해 오픈 오픈 :
# my_app.py def fetch_data(): # Simulate an API call return "Real API Response"# test_my_module.py my_module에서 import is_file_openable def test_is_file_openable (monkeypatch) : def mock_open (파일 이름, 모드) : Ioerror를 올리십시오 ( "mocked ioerror") monkeypatch.setattr ( "buildins.open", mock_open) is_file_openable ( "test.txt")
Pytest의 MonkeyPatch는 고립되고 신뢰할 수 있으며 깨끗한 테스트를 작성하는 강력한 도구입니다. 함수를 조롱하거나 환경 변수를 우선적이든 테스트 모서리 케이스에 관계없이 MonkeyPatch는 테스트 워크 플로를 크게 단순화 할 수 있습니다.
여기에 설명 된 예제와 모범 사례를 통합하여 테스트 스위트를 강력하고 유지 관리 할 수 있습니다. 공식 Pytest 문서를 탐색하여 자세한 내용을 배우고 Pytest의 잠재력을 최대한 활용하십시오!
행복한 테스트!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3