정수는 여러 반환 값을 모의
기후 mock.patch를 사용하고 각 호출에 대한 반환 값을 변경하고 싶습니다. 주의 사항은 다음과 같습니다. 패치되는 함수에는 입력이 입력을 기반으로 반환 값이 없습니다.
다음은 참조 용 코드입니다.
def get_boolean_response():
response = io.prompt('y/n').lower()
while response not in ('y', 'n', 'yes', 'no'):
io.echo('Not a valid input. Try again'])
response = io.prompt('y/n').lower()
return response in ('y', 'yes')
내 테스트 코드 :
@mock.patch('io')
def test_get_boolean_response(self, mock_io):
#setup
mock_io.prompt.return_value = ['x','y']
result = operations.get_boolean_response()
#test
self.assertTrue(result)
self.assertEqual(mock_io.prompt.call_count, 2)
io.prompt
"입력"의 플랫폼 독립적 (파이썬 2 및 3) 버전입니다. 그래서 사용자 입력을 조롱합니다. 두 가지 모두 반환 값 목록을 사용합니다.
반환 값이 유효하지 않은 경우 여기에서 무한 루프를 얻습니다. 결과적으로 테스트가 완료 값을 변경하는 방법이 필요합니다.
(이 질문에 대답하는 또 다른 방법은 단위 테스트에서 사용자 입력을 모방하는 방법을 설명하는 것입니다)
아니 DUP 이 질문에 내가 입력을 변화 할 수있는 능력이 없어 주로 때문입니다.
이 질문 에 대한 답변의 의견 중 하나가 같은 줄에 답변 답변 / 답변은 제공되지 않습니다.
에 반복 가능한 을 할당 할 수 side_effect
있고 모의은 호출이 될 때마다 시퀀스의 다음 값을 반환합니다 .
>>> from unittest.mock import Mock
>>> m = Mock()
>>> m.side_effect = ['foo', 'bar', 'baz']
>>> m()
'foo'
>>> m()
'bar'
>>> m()
'baz'
Mock()
문서 인용 :
side_effect 가 반복 가능한 인 경우 모의 에, 대한 각 호출은 반복 가능한에서 다음 값을 반환합니다.
따로, 테스트 response is not 'y' or 'n' or 'yes' or 'no'
는 작동하지 않습니다 . 어디에나 (response is not 'y')
참인지 또는 참 인지 경우 'y'
(항상 비어 있지 않은 경우 항상 참임) 등 입니다. or
연산자의 양쪽에있는 다양한 표현식 은 독립적 입니다. 여러 값에 대해 하나의 변수를 테스트하는 방법을 참조하십시오 .
또한is
을 테스트 하는 데 사용 하는 것 입니다. CPython 인터프리터 는특정 상황 에서 문자열 오브젝트를 재사용 할 수 있지만 이는 신뢰 할만한 동작이 아닙니다.
따라서 다음을 사용하십시오.
response not in ('y', 'n', 'yes', 'no')
대신; 이것은 등식 테스트 ( ==
)를 response
사용하여 동일한 내용 (값)을 가진을 문자열 참조 하는지 판별합니다 .
동일하게 적용 response == 'y' or 'yes'
됩니다. 사용하는 response in ('y', 'yes')
대신.
참고 URL : https://stackoverflow.com/questions/24897145/python-mock-multiple-return-values
'IT' 카테고리의 다른 글
여백 상단 푸시 외부 div (0) | 2020.07.09 |
---|---|
분리 된 HEAD 상태에서 git commit은 어떻게 분리 되었습니까? (0) | 2020.07.09 |
어디서 발생의 메모리를 결정하고 있습니까? (0) | 2020.07.09 |
오류 : 테이블 xxx에 대한 테이블 공간이 존재합니다. (0) | 2020.07.09 |
Bootstrap 3.0- 고정 열 크기를 포함하는 유동 격자 (0) | 2020.07.09 |