python - 在python 2的unittest模块中模拟raw_input()

标签 python unit-testing input

我正在尝试了解如何使用 python 的单元测试框架

我有一段代码看起来像这样——

while True:
    filename = raw_input('Enter file')
    if os.path.exists(filename):
        break
    else:
        print "That file does not exist"
return filename

有人可以帮我开发 unittest 模块来测试它吗?我问这个问题是为了学习如何使用单元测试(我正在尝试学习 TTD:测试驱动开发)

到目前为止我已经想到了这个 ... 导入单元测试 导入操作系统路径

类 TestFunctions(unittest.TestCase):

def setUp(self):
    self.prompt = 'Enter filename: '

def test_get_file(self):

    # TODO make sure empty filename argument requests for new filename
    filename = find_author.get_valid_filename(self.prompt)
    self.assertTrue(<EXPRESSION?>)

    # TODO make sure valid filename returns the "filename"
    # TODO make sure invalid filename prompts that file does not exit and requests new filename 

如果 name == "ma​​in": 单元测试.main()

最佳答案

一个简单的方法是猴子修补 raw_input

例如,在你的测试模块中(因为你应该将你的测试者和测试者分成单独的文件),你可能有:

import module_being_tested
... run tests ...

在运行测试之前,您可以简单地执行以下操作:

import module_being_tested

def mock_raw_input(s):
    return 'data.txt'

module_being_tested.raw_input = mock_raw_input

... run tests ....

现在,当您的测试模块调用 raw_input 时,它实际上会调用 mock_raw_input,并且总是会返回 'data.txt' .

关于python - 在python 2的unittest模块中模拟raw_input(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20458978/

相关文章:

python - 从 Python 数据结构中解压位置参数

python - 如何找出所需的窗口大小?

python pdb : step into a function called from console

c# - 使用 lambda 和 Moq 对 ServiceLayer 进行单元测试

java - 时间无关的 JUnit 测试用例

python - 在 C++ 中创建对象并将指针传递给 python

c++ - 轻松编写保持状态的模拟

c - 在逗号处拆分输入行

android - 输入 "tap"命令丢失(Android 终端模拟器)

jquery - 复选框启用/禁用提交仅一次,jquery