Tôi đang sử dụng pythons mock.patch và muốn thay đổi giá trị trả lại cho mỗi cuộc gọi. Đây là lời cảnh báo: chức năng được vá không có đầu vào, vì vậy tôi không thể thay đổi giá trị trả về dựa trên đầu vào.
Đây là mã của tôi để tham khảo.
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')
Mã kiểm tra của tôi:
@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
chỉ là một phiên bản "đầu vào" độc lập trên nền tảng (python 2 và 3). Vì vậy, cuối cùng tôi đang cố gắng để chế nhạo đầu vào của người dùng. Tôi đã thử sử dụng một danh sách cho giá trị trả về, nhưng nó không hoạt động.
Bạn có thể thấy rằng nếu giá trị trả về là một cái gì đó không hợp lệ, tôi sẽ chỉ nhận được một vòng lặp vô hạn ở đây. Vì vậy, tôi cần một cách để cuối cùng thay đổi giá trị trả về, để thử nghiệm của tôi thực sự kết thúc.
(một cách khác có thể để trả lời câu hỏi này có thể là giải thích cách tôi có thể bắt chước đầu vào của người dùng trong bài kiểm tra đơn vị)
Không phải là một bản sao của câu hỏi này chủ yếu vì tôi không có khả năng thay đổi đầu vào.
Một trong những ý kiến của Câu trả lời cho câu hỏi này là cùng một dòng, nhưng không có câu trả lời / nhận xét nào được cung cấp.
is
để so sánh chuỗi ký tự. Đừng làm vậy. Thực tế là nó hoạt động (đôi khi) chỉ là một chi tiết triển khai trong CPython. Ngoài ra, response is not 'y' or 'n' or 'yes' or 'no'
có lẽ không làm những gì bạn nghĩ đó là ...
response is not 'y' or 'n' or 'yes' or 'no'
trong không làm những gì bạn nghĩ rằng nó. Xem Làm cách nào để kiểm tra một biến đối với nhiều giá trị? và bạn không nên sử dụngis
để so sánh các giá trị chuỗi, sử dụng==
để so sánh các giá trị , không phải danh tính đối tượng.