我在 Pycharm 中有一個簡單的 ATM 刺激功能,想為我的功能撰寫測驗。但是,每次我在第一個要求用戶 Pin 的函式上運行測驗時,終端都會要求我輸入而不是運行模擬。這是我的功能:
def validate_pin(correct_pin):
pin_input = input('PLEASE ENTER YOUR 4-DIGIT PIN: ')
if pin_input.isnumeric() is True and int(pin_input) == correct_pin:
return True
return False
def calculate_balance(current_balance):
withdraw_amount = input("Please enter the amount you would like to withdraw: ")
if withdraw_amount.isnumeric() is not True:
raise TypeError
new_balance = current_balance - int(withdraw_amount)
if new_balance < 0:
raise Exception
return new_balance
def withdraw_money():
correct_pin = 1223
attempts = 3
balance = 100
while attempts != 0:
pin_validity = validate_pin(correct_pin)
if pin_validity is True:
print('PIN is correct.')
try:
new_balance = calculate_balance(balance)
except TypeError:
print("Please enter numbers only!")
except Exception:
print("You have put an unaccepted amount! Try again later.")
else:
print("You have £{} remaining in your account.".format(new_balance))
finally:
print("??? THANK YOU FOR USING THIS ATM. HAVE A GOOD DAY! ???")
break
else:
attempts -= 1
print("Wrong pin, try again! You only have {} attempts remaining.".format(attempts))
withdraw_money()
我嘗試了不同版本的語法來運行測驗,但沒有一個有效……有什么想法嗎?
1.
import unittest
from unittest.mock import patch
import atm
from unittest import TestCase
class TestingVersionThree(unittest, TestCase):
@patch('builtins.input', lambda *args: '1223')
def test_func1(self):
self.assertEqual(atm.validate_pin(), True)
@patch('builtins.input', lambda *args: '1111')
def test_func2(self):
self.assertEqual(atm.validate_pin(), False)
if __name__ == '__main__':
unittest.main()
class TestPinMockedInput(unittest.TestCase):
@patch('builtins.input', lambda x: "1223")
def test_with_valid_input(self):
result = atm.validate_pin()
expected_result = True
self.assertTrue(result == expected_result)
@patch('builtins.input', lambda x: "1111")
def test_invalid_input_wrong_number(self):
with self.assertRaises(ValueError):
result = atm.validate_pin()
expected_result = False
self.assertTrue(result == expected_result)
@patch('builtins.input', lambda x: "hi12")
def test_invalid_input_non_numeric(self):
with self.assertRaises(ValueError):
result = atm.validate_pin()
expected_result = False
self.assertTrue(result == expected_result)
if __name__ == '__main__':
unittest.main()
uj5u.com熱心網友回復:
匯入 Python 檔案時,將執行不在函式中的任何代碼。這意味著運行任何未縮進的內容。
當單元測驗檔案執行import atm時,它將最終運行withdraw_money()位于atm.py.
檔案 2 中的陳述句,if __name__ == "__main__":如果從命令列運行檔案,則允許執行函式,但如果從另一個模塊匯入,則阻止呼叫該函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/457279.html
