Python测试。原始输入测试

Python测试。原始输入测试,python,unit-testing,mocking,Python,Unit Testing,Mocking,我有一个python函数,询问用户是想使用当前文件还是选择一个新文件。我需要测试一下。以下是函数: def file_checker(self): file_change = raw_input('If you want to overwite existing file ?(Y/N) ') if (file_change == 'y') or (file_change == 'Y') or (file_change == 'yes'): logging.deb

我有一个python函数,询问用户是想使用当前文件还是选择一个新文件。我需要测试一下。以下是函数:

def file_checker(self):
    file_change = raw_input('If you want to overwite existing file ?(Y/N) ')

    if (file_change == 'y') or (file_change == 'Y') or (file_change == 'yes'):
        logging.debug('overwriting existing file')

    elif file_change.lower() == 'n' or (file_change == 'no'):
        self.file_name = raw_input('enter new file name: ')
        logging.debug('created a new file')
    else:
        raise ValueError('You must chose yes/no, exiting')
    return os.path.join(self.work_dir, self.file_name)
我已经在用户选择“是”时完成了该部件,但我不知道如何测试“否”部件:

def test_file_checker(self):
    with mock.patch('__builtin__.raw_input', return_value='yes'):
        assert self.class_obj.file_checker() == self.fname
    with mock.patch('__builtin__.raw_input', return_value='no'):
    #what should I do here ? 
根据:

如果
副作用
是一个iterable,那么每个对mock的调用都将返回 iterable中的下一个值。
副作用也可以是任意值 不可分割对象。对模拟的重复调用将从返回值 iterable(直到iterable耗尽并且停止迭代 提出):

因此,
no
部分可以表示为:

with mock.patch('__builtin__.raw_input', side_effect=['no', 'file2']):
    assert self.class_obj.file_checker() == EXPECTED_PATH

顺便说一句,如果用户出错,在用户选择“是”或“否”之前循环,而不是立即退出,这不是更有意义吗?