Python의 입력을 기반으로 모의 반환 값
- Python의 입력을 기반으로 모의 반환 값
- Python에서 모의 사용
- Python에서 모의 객체 사용
- 파이썬에서 조롱의 의미
- 입력에 따라 다른 값을 반환하는 Mock 작성
- 입력에 따라 반환되는 Python Mock
이 문서에서는 Python의 입력에 따라 다른 값을 반환하는 모의 함수를 만드는 방법을 보여줍니다. 또한 모의 함수를 테스트하는 방법도 보여줍니다.
마지막으로 모의 함수에 대한 몇 가지 고급 기술을 보여 드리겠습니다. 따라하기 위해 프로그래밍이나 테스트에 대해 알 필요는 없습니다.
Python의 입력을 기반으로 모의 반환 값
Python은 풍부한 테스트 도구 생태계를 갖춘 매우 강력한 언어입니다. 그것은 단위 테스트에 완벽하게 만드는 많은 기능을 가지고 있습니다.
널리 사용되는 도구 중 하나는 mock
모듈로, 시스템의 일부를 모의 개체로 대체하고 사용 방법을 주장할 수 있습니다.
모의 함수를 사용하면 함수의 기능을 코드로 대체할 수 있습니다. 이는 함수를 사용할 수 없을 때 코드의 동작을 테스트하거나 코드가 다른 입력에 어떻게 반응하는지 테스트하려는 경우에 유용할 수 있습니다.
Python에서 모의 사용
Mocking은 테스트의 신뢰성과 효율성을 향상시키는 데 사용할 수 있는 강력한 기술입니다. 이 기사에서는 Python 테스트에서 목 객체를 사용하는 방법을 알려줍니다.
-
모킹을 사용하면 실제 객체를 시뮬레이션 버전으로 대체할 수 있습니다. 이는 아직 사용할 수 없는 다른 구성 요소에 의존하는 구성 요소를 테스트하려는 경우에 유용할 수 있습니다.
예를 들어 실제로 데이터베이스에 연결하지 않고 데이터베이스 연결을 테스트할 수 있습니다.
-
모킹은 외부 종속성을 제거하는 데에도 사용할 수 있습니다. 이것은 테스트 중에 네트워크 호출을 하거나 데이터베이스와 상호 작용하는 것을 피하고 싶을 때 유용할 수 있습니다.
-
모킹을 사용하여 테스트의 효율성을 높일 수 있습니다. 객체를 조롱할 때 실제 객체를 인스턴스화하는 오버헤드를 피할 수 있습니다.
이는 많은 개체를 인스턴스화하는 코드를 테스트할 때 특히 유용할 수 있습니다.
-
테스트를 보다 안정적으로 만들기 위해 모킹을 사용할 수도 있습니다. 외부 종속성을 제거하면 네트워크 또는 데이터베이스 가용성에 의존하는 불안정한 테스트를 피할 수 있습니다.
Python에서 모의 객체 사용
테스트에서 목 객체를 사용하려면 먼저 Mock 클래스를 만들어야 합니다. 이 클래스는 실제처럼 보이고 동작하는 모의 개체를 만드는 데 사용할 수 있습니다.
Mock 클래스가 있으면 모의 객체를 인스턴스화하여 테스트에 사용할 수 있습니다. 모의 객체는 교체하는 실제 객체와 동일한 메서드를 가지므로 실제 객체를 사용하는 것처럼 사용할 수 있습니다.
모의 객체 사용을 마치면 그것이 올바르게 사용되었다고 주장할 수 있습니다. 예를 들어 쿼리를 실행하는 데 모의 데이터베이스 연결이 사용되었다고 주장할 수 있습니다.
따라서 모킹은 Python 테스트의 안정성과 효율성을 개선하는 데 사용할 수 있는 강력한 도구입니다.
실제 개체를 모의 개체로 교체하면 실제 개체를 인스턴스화하는 오버헤드를 피할 수 있습니다. 또한 테스트를 보다 안정적으로 만들기 위해 외부 종속성을 제거할 수 있습니다.
파이썬에서 조롱의 의미
조롱
이라는 단어는 여러 상황에서 사용됩니다. 그러나 이 문서 전체에서 다음 정의가 사용됩니다.
“하나 이상의 실제 함수 호출 또는 개체를 가짜 호출 또는 개체로 대체하는 프로세스입니다.”
모의 함수를 호출하면 실제 작업 없이 사전 설정된 순간 값이 전달됩니다. 가짜 개체의 특성과 메서드는 실제 개체를 먼저 생성하거나 다른 작업을 수행하지 않고 테스트 내부에서 완전히 동일한 방식으로 정의됩니다.
테스트에 관해서는 테스트를 작성한 사람이 함수 호출의 반환 값을 정의할 수 있다는 사실이 엄청난 힘을 줍니다. 그러나 그것은 또한 테스트를 작성하는 사람이 모든 것을 정확하게 설정하기 위해 몇 가지 기본적인 작업을 수행해야 함을 의미합니다.
Python의 unittest.mock
모듈은 프로그래밍 언어에서 조롱을 담당합니다. 데코레이터 및 컨텍스트 관리자 역할을 하는 패치 기능과 MagicMock
클래스는 이 모듈의 두 가지 필수 클래스 및 기능입니다.
또한 몇 가지 다른 유용한 클래스와 메서드도 포함되어 있습니다. Python 조롱과 관련된 대부분의 작업은 이 두 가지 강력한 구성 요소를 사용하여 수행할 수 있습니다.
입력에 따라 다른 값을 반환하는 Mock 작성
이제 우리는 mock과 그 기능에 대해 잘 알고 있습니다. 코딩 예제를 통해 mock을 더 잘 이해해 봅시다.
함수를 생성하기 위해 *args
및 **kwargs
를 사용합니다. 이러한 매개변수는 간단한 키워드 인수를 사용하기 때문입니다. 따라서 문자열, 정수, 부동 소수점 및 부울과 같은 모든 데이터 유형을 전달할 수 있으며 키워드 인수에도 값을 할당할 수 있습니다.
-
함수를 만듭니다.
-
전달 인수
*args
및 키워드 인수**kwargs
-
*args
및**kwargs
가 있는 튜플을 반환합니다. -
함수 호출
-
결과 인쇄
더 나은 이해를 위해 아래 코드를보십시오.
def mock_function(*args, **kwargs):
return (args, kwargs)
mock_function("x", "y")
(("x", "y"), {})
mock_function("x", y=2, z="mock test")
출력:
(('x',), {'y': 2, 'z': 'mock test'})
코드 출력에서 *args
값이 먼저 인쇄되는 것을 볼 수 있습니다. 이 값은 x
이고 **kwargs
값 {'y': 2, 'z': 'mock test'})
입니다. 뒤에 인쇄됩니다.
입력에 따라 반환되는 Python Mock
이제 앞에서 논의한 함수를 반환하는 모의 객체를 만들 것입니다.
-
모의 함수를 만들기 위해 먼저
unittest.mock
모듈에서MagicMock
을 가져옵니다. -
변수를 만들고
unittest.mock
에서MagicMock
을 사용합니다. -
결과를 인쇄하십시오.
예제 코드:
from unittest.mock import MagicMock
my_mock_1 = MagicMock(name="abid", return_value=mock_function)
my_mock_1
출력:
<MagicMock name='abid' id='139916486559696'>
코드 출력은 MagicMock
명령이 사용되었음을 보여줍니다. 그리고 코드에서 사용한 abid
라는 이름과 코드에서 생성된 id 번호를 볼 수 있습니다.
이제 다른 변수를 생성하여 변수 my_mock_1
이 어디에 있는지 확인합니다.
예제 코드:
func_from_mock2 = my_mock_1()
func_from_mock2
출력:
<function __main__.mock_function(*args, **kwargs)>
코드 출력은 함수가 인수 *args
및 키워드 인수 **kwargs
를 전달함을 보여줍니다.
이제 변수 func_from_mock2
에 몇 가지 값을 제공합니다. 따라서 10, 10
을 전달하고 인쇄합니다.
예제 코드:
func_from_mock2(10, 10)
출력:
((10, 10), {})
출력 ((10, 10))
은 *args
인수를 사용했음을 의미하고 {}
는 키워드 인수 **kwargs
를 사용할 수 있음을 의미합니다.
이제 키워드 인수 **kwargs
를 사용합니다.
예제 코드:
func_from_mock2(15, 18, 매개변수=50)
출력:
((15, 18), {'param': 50})
인수 *args
와 키워드 인수 **kwargs
를 모두 사용했습니다. ((15, 18),
은 모의 입력의 인수 부분을 표시하고 {'param': 50})
은 모의 입력의 키워드 인수 부분을 표시합니다.
따라서 Mock
은 입력에 따라 다른 값을 반환합니다.
이 Python 문서가 Python에서 Mock
을 사용하는 방법을 이해하는 데 도움이 되기를 바랍니다.
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedIn