파이썬 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 이 질문에 내가 입력을 변화 할 수있는 능력이 없어 주로 때문입니다.
이 질문 에 대한 답변의 의견 중 하나는 같은 줄에 있지만 답변 / 댓글은 제공되지 않았습니다.
is
문자열 리터럴을 비교 하는 데 사용하려는 것 같습니다 . 하지마 그것이 작동한다는 사실 (때로는)은 CPython의 구현 세부 사항 일뿐입니다. 또한, response is not 'y' or 'n' or 'yes' or 'no'
아마도 당신이 생각하는 것을하지 않을 것입니다 ...
response is not 'y' or 'n' or 'yes' or 'no'
에 없는 당신이하지 무슨 생각을하고. 여러 값에 대해 하나의 변수를 테스트하는 방법을 참조하십시오 . 문자열 값 을 비교 하거나 객체 ID가 아닌 값 을 비교 하는 데 사용 해서는 안됩니다 .is
==