IT

정수는 여러 반환 값을 모의

lottoking 2020. 7. 9. 07:53
반응형

정수는 여러 반환 값을 모의


기후 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

반응형