如何在哨兵while循环中使用PyTest测试输入列表

时间:2019-03-11 15:59:21

标签: python python-3.x pytest

我一直在尝试使用此功能在Pytest中测试输入列表

def test_play_hand():                                                               
    word_list = load_words()                                                        
    hand = {'e': 2, 'u': 1, 'g': 1, 'm': 1, 'b': 1, 't': 1}                         
    inputs = ['gum', 'beet', '.']                                                   

    with mock.patch('builtins.input', return_value= next(iter(inputs))):                                                                      
        assert play_hand(hand, word_list) == 0  

函数play_hand运行基于哨兵的while循环,该循环获取字典,然后要求用户输入字符串。

如果输入为.,则循环结束。

否则,如果循环获得一个字符串,它将检查指针和可用字符,并从指针中删除字符串中使用的字符。

mock.patch仅获得一个输入时,该测试有效。

如何使用列表或多个输入进行测试以实施测试?

如果没有iter(),它将给出不可迭代的输入错误,而使用iter(),它将冻结。

我非常感谢您的投入。

编辑:忘记提及play_hand返回一个整数

1 个答案:

答案 0 :(得分:0)

找到了答案。

def test_play_hand():                                                               
    word_list = load_words()                        
    hand = {'e': 2, 'u': 1, 'g': 1, 'm': 1, 'b': 1, 't': 1} 
    inputs = ['gum', 'beet', '.']                                      

    with mock.patch('builtins.input', side_effect = inputs) :                       
        assert play_hand(hand, word_list) == 12 

我必须将return_value替换为side_effect才能运行测试中的所有输入。

链接:https://docs.python.org/3/library/unittest.mock.html