第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Python 3 - 具有多個(gè)輸入的單元測(cè)試和使用模擬的打印語(yǔ)句

Python 3 - 具有多個(gè)輸入的單元測(cè)試和使用模擬的打印語(yǔ)句

慕無(wú)忌1623718 2022-10-18 17:34:36
我正在研究 Python,幾周前我創(chuàng)建了一個(gè)游戲,用戶需要猜測(cè)用戶自己定義的間隔之間的數(shù)字?,F(xiàn)在我正在學(xué)習(xí) Unittest,我決定為游戲編寫(xiě)一個(gè)測(cè)試模塊。然而,由于它需要來(lái)自用戶的 4 個(gè)輸入(其中兩個(gè)定義了將生成隨機(jī)數(shù)的范圍,一個(gè)是用戶的猜測(cè),最后一個(gè)是一個(gè) Y/N 問(wèn)題,供用戶決定他是否想要繼續(xù)。import randomdef main():    print('Welcome to the guess game!')    while True:        try:            low_param = int(input('Please enter the lower number: '))            high_param = int(input('Please enter the higher number: '))             if high_param <= low_param:                print('No, first the lower number, then the higher number!')            else:                break        except:            print('You need to enter a number!')    while True:        try:            result = random.randint(low_param, high_param)            guess = int(input(f'Please enter a number between {low_param} and {high_param}: '))            if low_param <= guess <= high_param:                if result == guess:                    print('Nice, dude!')                    break                else:                    print ('Not yet, chap')                while True:                    try_again = input('Would you like to try again? (Y/N) ')                    if try_again.lower() == 'n':                        break                    elif try_again.lower() == 'y':                        print('If you consider yourself capable...')                        break                    else:                        pass                if try_again.lower() == 'n':                    print('Ok, maybe next time, pal :v')                    break                            else:                print(f'Your guess must be between {low_param} and {high_param}')        except:            print('Are you sure you entered a number?')if __name__ == '__main__':    main()在測(cè)試中,我想創(chuàng)建一些方法來(lái)驗(yàn)證以下情況:1 - low_param 或 high_param 不是數(shù)字 2 - low_param 高于 high_param 3 - 猜測(cè)高于 high_param 4 - 猜測(cè)低于 low_param 5 - 猜測(cè)是字符串 6 - try_again 既不是 Y 也不是 N我設(shè)法在第一種方法上模擬了一個(gè)輸入,但是我不知道如何將 print 語(yǔ)句斷言為情況輸出。對(duì)于其他情況,我需要模擬多個(gè)輸入,然后我就卡住了。我該如何解決這兩個(gè)問(wèn)題?
查看完整描述

1 回答

?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

你的第一個(gè)問(wèn)題是跳出循環(huán)。print您可以通過(guò)向引發(fā)異常的模擬函數(shù)添加副作用來(lái)做到這一點(diǎn),并在測(cè)試中忽略該異常。mockedprint也可用于檢查打印的消息:


@patch('randomgame.print')

@patch('randomgame.input', create=True)

def test_params_input_1(self, mock_input, mock_print):

    mock_input.side_effect = ['foo']

    mock_print.side_effect = [None, Exception("Break the loop")]

    with self.assertRaises(Exception):

        main()

    mock_print.assert_called_with('You need to enter a number!')

請(qǐng)注意,您必須將副作用添加到第二個(gè) print調(diào)用,因?yàn)榈谝粋€(gè)調(diào)用用于發(fā)出歡迎消息。


第二個(gè)測(cè)試的工作方式完全相同(如果以相同的方式編寫(xiě)),但有一個(gè)問(wèn)題:在您的代碼中,您捕獲的是通用異常而不是特定異常,因此您的“中斷”異常也將被捕獲。這通常是不好的做法,因此與其解決此問(wèn)題,不如捕獲轉(zhuǎn)換int失敗時(shí)引發(fā)的特定異常:


while True:

    try:

        low_param = int(input('Please enter the lower number: '))

        high_param = int(input('Please enter the higher number: '))

        if high_param <= low_param:

            print('No, first the lower number, then the higher number!')

        else:

            break

    except ValueError:  # catch a specific exception

        print('You need to enter a number!')

代碼中的第二個(gè)try/catch塊也是如此。


查看完整回答
反對(duì) 回復(fù) 2022-10-18
  • 1 回答
  • 0 關(guān)注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)